terça-feira, 13 de novembro de 2007

Exercícios sobre Grafos II

O exercício a seguir, irá ler uma matriz de incidência e armazenar o grafo e uma matriz de Adjacência.

Lembrando que este também necessita do arquivo txt que segue abaixo:



1

4

4
3
2
1

4

0 1 A 0
2 0 B 1
3 1 C 0
2 3 D 0

indice do nó para impressão
Qtde nos
nos
.
.
.
qtde arestas
n1 n2 aresta direção



Código:


using namespace std;
class node; // classe NODE
typedef node *ptrno;

class node;

typedef node *ptrno;

class node
{
private:
int vertice,peso;
ptrno prox;
public:
node(){
peso=0;vertice=0; prox=NULL;
}
void setPeso(int p){
peso=p;
}
void setVertice(int v){
vertice=v;
}
void setProx(node *p){
prox=p;
}
node *getProx(){
return prox;
}
};


class Grafo{
private:
int qtdnos;
int **matriz;
ptrno lista;
int *pesos;
public:
Grafo(){
qtdnos=0;
pesos=NULL;
matriz=NULL;
};

void lerArquivoIncidencia(int indice);
};


void Grafo::lerArquivoIncidencia(int indice){
int tamanho,n1,n2,aresta,direcao,qtdaresta,gambiarra;

cin>>tamanho; //le a qtd de NO do grafo
cin>>numerodono >>numerodono >>numerodono >>numerodono ;
cin>>qtdaresta;

matriz = new int*[qtdaresta]; //criacao do vetor q representa
colunas
for(int i = 0; i < tamanho; i++){
matriz[i] = new int[tamanho];
}


for(int k = 0; k < qtdaresta; k++){
for(int l = 0; l < tamanho; l++){
matriz[k][l] = 0;
}
}


for (int n=0;n < qtdaresta;n++){
cin>>n1;
cin>>n2;
cin>>aresta;
cin>>direcao;
matriz[n1][aresta]=1;
matriz[n2][aresta]=1;
}

for (int o=0;o < tamanho;o++){
for (int p=0;p < qtdaresta;p++){
cout << matriz[o][p]<< " ";
}
cout<< endl;
}
cout<< endl;
cout<< "O no " << indice << " tem os seguintes nos adjacentes: " << endl;


for(int r=0;r < qtdaresta;r++){
if(matriz[indice][r]==1){
for(int s=0;s < tamanho;s++){

if(( matriz[s][r]==1)&&(s!=indice))
cout << s <<" ";
}
}
}
}

int main(){
Grafo grafo1;
grafo1.lerArquivoIncidencia(1);
getchar();
}

Nenhum comentário: