Ir ao conteúdo

Posts recomendados

Postado

Estou tentando criar uma matriz que é um vetor de ponteiros que cada nó aponta para outro vetor de ponteiros:

image.png

Isso foi o que eu consegui pensar, mas não funciona.

 

class Grafo {
	
private:
	int **mat;
	int numVertices;	
public:
	Grafo():
  	numVertices(0)
  	{
  	}
  
	Grafo(int nNumVertices){
		mat = new int*[nNumVertices] ;
		for(int i=0;i<nNumVertices;i++){
			mat*[i]= new int*[nNumVertices];
		}
      
      	for(int i = 0;i<numVertices; i ++) {
			for(int j=0;j<numVertices; j ++)mat[i][j] = 0;
			pos[i]= -1;
		}
	}
  .
  .
  .
  };

 

 

 

codigo completo:

#include <iostream>
using namespace std;
class Aresta {
	private:
		int v1, v2, peso;	
	public:
		Aresta(int nV1, int nV2, int nPeso):
			v1(nV1),
			v2(nV2),
			peso(nPeso)
		{ 
		}
		int getPeso(){return peso;}
		int getV1(){return v1;}
		int gwtV2(){return v2;}
	};
class Grafo {
	
private:
	Aresta obj;
	int **mat, numVertices, *pos;
public:
	Grafo():
  	numVertices(0)
  	{
  	}
	Grafo(int nNumVertices){
		mat = new int*[nNumVertices] ;
		
		for(int i=0;i<nNumVertices;i++){
			mat*[i]= new int*[nNumVertices];
		}
		pos = new int*[nNumVertices];
		numVertices = nNumVertices;
		for(int i = 0;i<numVertices; i ++) {
			for(int j=0;j<numVertices; j ++)mat[i][j] = 0;
			pos[i]= -1;
		}
	}
	void insereAresta(int v1, int v2, int peso){
		mat[v1][v2] = peso;
	}
	bool existeAresta (int v1, int v2) {
	return (mat[v1][v2] > 0);
	}
	bool listaAdjVazia (int v){
		for (int i=0; i<numVertices; i++)
		if (mat[v][i]>0) return false;
		return true;
	}
	Aresta primeiroListaAdj(int v){
		pos[v] = -1;
		return proxAdj (v);
	}
	Aresta proxAdj(int v){
		pos[v] ++;
		while ((pos[v]<numVertices) && (mat[v][pos[v]] == 0))pos[v]++;
		if(pos[v] == numVertices) return null ;
		else return new Aresta(v, pos[v], mat[v][pos[v]]);
	}
	Aresta retiraAresta(int v1, int v2){
		if(mat[v1][v2] == 0) return null ; 
		else {
		Aresta aresta = new Aresta(v1, v2, mat[v1][v2]);
		mat[v1][v2]=0;
		return aresta;
		}
	}
	void imprime(){
		//para ser implementado
		
	}
	int getNumVertices ( ) {
		return numVertices;
	}
};
int main(){
	//para ser implementado
}

 

Postado

sim, mas quero colocar a matriz em um vetor de ponteiros que aponta para vetor de ponteiros igual na imagem, então ao invés de criar mat[tam][tam], eu queria algo como

 

 

	mat = new int*[nNumVertices] ; //vetor de ponteiros
	for(int i=0;i<nNumVertices;i++){
		mat*[i]= new int*[nNumVertices];//que cada nó aponta para outros vetores de ponteiros
	}


então vazendo assim uma matriz que tudo é ligado por ponteiros ficando igual a imagem:

 

https://imgur.com/a/hLXfBZD

  • Curtir 1
Postado

consegui, tinha esquecido que o proprio vetor é um tipo de ponteiro:
 

class Grafo {
	
private:
	int ***mat, numVertices, *pos;
public:
	Grafo(int nNumVertices){
		*mat = new int*[nNumVertices];
		for (int i=0;i<nNumVertices;i++){
			mat[i]= new int*[nNumVertices];
		}
		pos = new int[nNumVertices];
		numVertices = nNumVertices;
		for(int i = 0;i<numVertices; i ++) {
			for(int j=0;j<numVertices; j ++)mat[i][j] = 0;
			pos[i]= -1;
		}
	}

 

Postado

Isso é muito complicado e frágil.

 

E onde está o destrutor de grafo? É praticamente código em C. E se é uma matriz de adjacência não bastariam bits? Porque int? 

 

Seria bem mais simples alocar simplesmente a area toda, alocando NxN int nesse caso, e calcular os índices usando uma função.

onde está o construtor padrão de Grafo? Vai precisar dele.

 

O código nem compila ainda. Tem vários erros em relação ao retorno das funções.

 

 

 

 

Use comentários para ajudar você e outros a entenderem o que pretende fazer no código

 Por exemplo:
 

    Aresta primeiroListaAdj(int v)
    {
        pos[v] = -1;
        return proxAdj(v);
    }

 

que pretende fazer aqui?

    void imprime()
    {
        // para ser implementado
    }

 

Essa sempre é a primeira função que você implementa...

 

Precisa dela para testar as outras e não o contrário

50 minutos atrás, arfneto disse:

onde está o construtor padrão de Grafo? Vai precisar dele.

 

Não de grafo, mas de Aresta. E pra que serve obj afinal?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...