Sample Input
7
6
A B C D E F G
A B
A C
B D
B E
C F
C G
Sample Output
A B C D E F G
A B D E C F G
#include<iostream>
#include<string.h>
#include<algorithm>
#include<deque>
using namespace std;
#define MAXNODE 100
//最大顶点数目
void dfs(int G[][MAXNODE],int i,int
n);
void bfs(int G[][MAXNODE],int i,int
n);
int a[MAXNODE][MAXNODE];
struct ns
{
int
no;//顶点关系类型,对无权图用1或0表示是否相邻;对带权图为权值类型
char ch;//弧相关信息
}NODE[MAXNODE];
bool visi1[MAXNODE]={false};
bool visi2[MAXNODE]={false};
int main()
{
int n,m,i,j,x1,x2,flag;
char ch1,ch2;
cin>>m>>n;
for(i=0;i<m;i++)
{
cin>>NODE[i].ch;
NODE[i].no=i;//赋值为
}
for(i=0;i<m;i++)
for(j=0;j<m;j++)
a[i][j]=0;
for(i=0;i<n;i++)
{
flag=0;
x1=-1;
x2=-1;
cin>>ch1>>ch2;
for(j=0;j<m;j++)
{
if(ch1==NODE[j].ch)
x1=NODE[j].no;
else
if(NODE[j].ch==ch2)
x2=NODE[j].no;
if(x1!=-1&&x2!=-1)
{
flag=1;
break;
}
}
if(flag==1)
a[x1][x2]=1;
}
bfs(a,0,m);
cout<<endl;
dfs(a,0,m);
cout<<endl;
while(1);
return 0;
}
//采用递归来进行深度搜索
void dfs(int G[][MAXNODE],int i,int n)
{
int j;
cout<<NODE[i].ch<<"
";
visi1[i]=true;
for(j=0;j<n;j++)
{
if(!visi1[j]&&G[i][j]!=0)
dfs(G,j,n);
}
}
//利用队列广度搜索
void bfs(int G[][MAXNODE],int i,int n)
{
int j,k;
deque<int> q;
cout<<NODE[i].ch<<"
";
visi2[i]=true;
q.push_back(i);
while(!q.empty())
{
k=q.front();
q.pop_front();
for(j=0;j<n;j++)
{
if(!visi2[j]&&G[k][j]!=0)
{
cout<<NODE[j].ch<<"
";
visi2[j]=true;
q.push_back(j);
}
}
}
}
转发至微博
转发至微博