#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(){
inicio_programa:
int result = 0;
// Menu de escolha
printf("Matriz Adjacente de Grafos ou Digrafos!");
printf("\n\n Escolha: (1) Grafos (2) Digrafos :");
scanf("%d", &result);
system("cls");
// Condição de GRAFO ou DIGRAFO
if( result == 1)
{
printf("\nGRAFO SELECIONADO\n ");
}
else{
if (result == 2)
{
printf("\nDIGRAFO SELECIONADO\n ");
}
// se nenhuma opção for valida, gera um erro e volta o programa
else{
printf("\n %d NAO EH UMA OPCAO VALIDA. DIGITE UMA OPCAO VALIDA PARA CONTINUAR\n", result);
system("pause");
system("cls");
goto inicio_programa;
}
}
// definição da variavel Vertice
int i, j, x, a1, v1, POrig,PDest;
printf("\nQuantidade de Vertices: ");
scanf("%d", &v1);
v1 = v1 + 1;
int m[v1][v1]; // inicia matriz
// inicia todos os pontos da matriz como "0"
for(i = 0; i<v1; i++)
for(j = 0; j<v1; j++)
m[j] = 0;
// implementa titulo de linha e coluna na matriz
for(i = 0; i<v1; i++)
{ m[0] = i; }
for(j = 0; j<v1; j++)
{ m[0][j] = j; }
// Colocar pontos na matriz
printf("\nQuantidade de Arestas: ");
scanf("%d", &a1);
for(x = 0; x < a1; x++)
{
ponto_origem:
printf("\nVertice de Origem %d: ", x+1);
scanf("%d", &POrig);
if(POrig >v1-1) // verifica se vertice existe na matriz
{
printf("\nPosicao de Vertice de Origem nao existente");
printf("\n\nInsira novamente\n\n");
goto ponto_origem;
}
ponto_destino:
printf("\nVertice de Destino %d: ", x+1);
scanf("%d", &PDest);
if(PDest >v1-1) // verifica se vertice existe na matriz
{
printf("\nPosicao de Vertice de Destino nao existente");
printf("\n\nInsira novamente\n\n");
goto ponto_destino;
}
switch(result) // define entre GRAFO e DIGRAFO usando a varialvel "result" definida no começo do programa
{
case 1: //GRAFO
m[POrig][PDest] = 1;
m[PDest][POrig] = 1;
break;
case 2: //DIGRAFO
m[POrig][PDest] = 1;
break;
}
// print da matriz
for(i = 0; i<v1; i++)
{
printf("\n");
for(j = 0; j<v1; j++)
printf("%d ", m[j]);
}
printf("\n\n");
}
getch();
return 0;
}