//图的邻接矩阵构造方法,以及DFS,BFS操作;
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define Max 20
int visited[20];
typedef struct
{
char vex[Max];
int vexs[Max][Max];
int vexnum,arcnum;
}MGraph;
int Loca(MGraph &G,char ch)
{
int i;
for(i=0;i<G.vexnum;i++)
{
if(ch==G.vex[i])
return i;
}
return -1;
}
void Creat_vex(MGraph &G)
{
int i,j;
int la1,la2;
char ch1,ch2;
scanf("%d%d",&G.vexnum,&G.arcnum);
for(i=0;i<G.vexnum;i++)
{
getchar();
scanf("%c",&G.vex[i]);
}
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.vexs[i][j]=0;
for(i=0;i<G.arcnum;i++)
{
getchar();
scanf("%c %c",&ch1,&ch2);
la1=Loca(G,ch1);
la2=Loca(G,ch2);
G.vexs[la1][la2]=1;
G.vexs[la2][la1]=G.vexs[la1][la2];
}
for(i=0;i<G.vexnum;i++)
{
for(j=0;j<G.vexnum;j++)
printf("%d ",G.vexs[i][j]);
putchar ('\n');
}
}
void DFS(MGraph G,int v)
{
visited[v]=1;
printf("%c ",G.vex[v]);
for(int i=0;i<G.vexnum;i++)
{
if(!visited[i]&&G.vexs[v][i])
DFS(G,i);
}
}
void DFS_Travel(MGraph G)
{
int v;
for(v=0;v<G.vexnum;v++)
visited[v]=0;
for(v=0;v<G.vexnum;v++)
if(!visited[v])
DFS(G,v);
}
void BFS_Travel(MGraph G)
{
queue<char>Q;
int i,j,k;
char ch;
for(i=0;i<G.vexnum;i++)
{
if(!visited[i])
{
visited[i]=1;
printf("%c ",G.vex[i]);
Q.push(G.vex[i]);
while(!Q.empty())
{
ch=Q.front();
Q.pop();
k=Loca(G,ch);
for(j=0;j<G.vexnum;j++)
{
if(!visited[j]&&G.vexs[k][j])
{
visited[j]=1;
printf("%c ",G.vex[j]);
Q.push(G.vex[j]);
}
}
}
}
}
}
int main()
{
MGraph G;
Creat_vex(G);
DFS_Travel(G);
memset(visited,0,sizeof(visited));
putchar('\n');
BFS_Travel(G);
putchar('\n');
return 0;
}
图的邻接矩阵建立以及遍历方法
原文作者:数据结构之图
原文地址: https://blog.csdn.net/oliver233/article/details/49453825
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/oliver233/article/details/49453825
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。