图的基本操作

来源:互联网 发布:社交平台源码 编辑:程序博客网 时间:2024/05/17 22:39

图数据结构的建立、图的DFS遍历和BFS遍历

/*测试数据:8 9ABCDEFGHA BB DB EE HD HA CC FC GF G*/#include <stdio.h>#include <string.h>#include <queue>#define MAX 20using namespace std;int visit[MAX+1]={0};typedef struct {char vexs[MAX];int A[MAX+1][MAX+1];int vexnum,arcnum;//图的顶点数和边数 }MGraph;int LocateVex(char ch1,MGraph G){//判断该节点是数组的第几个int i;for(i=0;i<G.vexnum;i++)if(G.vexs[i]==ch1)return i;}void InitGraph(MGraph &G){//图的建立int i,j,k;char ch1,ch2;printf("请输入图的节点数和边数:");scanf("%d %d%*c",&G.vexnum,&G.arcnum);printf("输入节点代号:");for(i=0;i<G.vexnum;i++)scanf("%c",&G.vexs[i]);getchar();printf("请输入边:");for(i=0;i<G.arcnum;i++){scanf("%c %c%*c",&ch1,&ch2);j=LocateVex(ch1,G);k=LocateVex(ch2,G);G.A[j][k]=1;G.A[k][j]=1;}}void DFS(int i,MGraph G){//深度优先搜索int j;visit[i]=1;printf("%c",G.vexs[i]);for(j=0;j<G.vexnum;j++)if(!visit[j] && G.A[i][j])DFS(j,G);}void BFS(MGraph G){//广度优先搜索int i,j,k;char ch;queue <char>q;for(i=0;i<G.vexnum;i++){if(!visit[i]){printf("%c",G.vexs[i]);visit[i]=1;q.push(G.vexs[i]);while(!q.empty()){ch=q.front();q.pop();k=LocateVex(ch,G);for(j=0;j<G.vexnum;j++){if(!visit[j] && G.A[k][j]){visit[j]=1;printf("%c",G.vexs[j]);q.push(G.vexs[j]);}}}}}}int main(){int i,j;MGraph G;memset(G.A,0,sizeof(G.A));InitGraph(G);printf("图的深度优先搜索遍历:");for(i=0;i<G.vexnum;i++)if(!visit[i])DFS(i,G);memset(visit,0,sizeof(visit));putchar('\n');printf("图的广度优先搜索遍历:");BFS(G);return 0;}


0 0