【まとめ】隣接マトリクス図の基本動作
#include
#include
#define MaxVertexNum 100
typedef int VertexType ; //
typedef int EdgeType; //
typedef struct
{
VertexType vexs[MaxVertexNum];
EdgeType edges[MaxVertexNum][MaxVertexNum];
int n,e;
}MGrap;
bool visited[MaxVertexNum];
void createMGrap(MGrap*);
void DFSTraverse(MGrap* );
void DFS(MGrap* , int );
void main()
{
freopen("input1.txt","r",stdin);//
MGrap *G =(MGrap*)malloc(sizeof(MGrap));
createMGrap(G);
for (int i=0;in;i++)
{
for(int j=0;jn;j++)
{
printf("%4d",G->edges[i][j]);
}
printf("
");
}
DFSTraverse(G);
}
void createMGrap(MGrap* G)
{
int i,j,k,w=0,p;
// printf("
");
scanf("%d,%d",&G->n,&G->e);
for ( p=0;pn;p++)
{
//fflush(stdin); //
// printf(" ");
scanf("%d",&G->vexs[p]);
}
// printf("
");
for ( i=0;in;i++)
for ( j=0;jn;j++)
G->edges[i][j]=0;
for ( k=0;ke;k++)
{
//printf(" (i,j) w
");
scanf("%d,%d,%d",&i,&j,&w);
G->edges[i][j]=w;
// G->edges[j][i]=w;
// printf(" i=%d,j=%d,w=%d
",i,j,w);
}
}
void DFSTraverse(MGrap* G)
{
int i;
for (i=0;in;i++)
visited[i]=false;
printf(" :
");
for (i=0;in;i++) // ,
if (!visited[i])
{
DFS(G,i);
}
printf("
");
}
void DFS(MGrap* G, int i)
{
printf("%d->",G->vexs[i]);
//fflush(stdout);
visited[i]=true;
for (int j=0;jn;j++)
if (G->edges[i][j]==1&&!visited[j])
DFS(G,j);
}
結果
直観図