您的位置:首页 > 其它

【总结】邻接矩阵 图的基本操作

2011-10-08 12:02 267 查看
#include <stdio.h>
#include <stdlib.h>

#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;i<G->n;i++)
{
for(int j=0;j<G->n;j++)
{
printf("%4d",G->edges[i][j]);

}
printf("\n");
}
DFSTraverse(G);
}
void createMGrap(MGrap* G)
{
int i,j,k,w=0,p;
//  printf("输入顶点数和边数\n");
scanf("%d,%d",&G->n,&G->e);

for ( p=0;p<G->n;p++)
{
//fflush(stdin);       //清除缓冲区
//  printf("输入顶点信息");
scanf("%d",&G->vexs[p]);
}
// printf("邻接矩阵初始化\n");
for ( i=0;i<G->n;i++)
for ( j=0;j<G->n;j++)

G->edges[i][j]=0;

for ( k=0;k<G->e;k++)
{
//printf("读入两个顶点(i,j)之间边的值w\n");
scanf("%d,%d,%d",&i,&j,&w);
G->edges[i][j]=w;
// G->edges[j][i]=w;
// printf("读入的数i=%d,j=%d,w=%d\n",i,j,w);
}

}

void DFSTraverse(MGrap* G)
{
int i;
for (i=0;i<G->n;i++)
visited[i]=false;
printf("深度优先遍历序列:\n");
for (i=0;i<G->n;i++)  //确保每一个顶点都遍历过,如果有孤立的也可以
if (!visited[i])
{

DFS(G,i);
}
printf("\n");
}
void DFS(MGrap* G, int i)
{

printf("%d->",G->vexs[i]);
//fflush(stdout);
visited[i]=true;
for (int j=0;j<G->n;j++)
if (G->edges[i][j]==1&&!visited[j])
DFS(G,j);

}


结果



直观图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: