#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int a[108][108];
int n,m;//顶点数、边数
int mark[108];
void hanshu1()//邻接矩阵存图
{
memset(a,0,sizeof(0));
printf(“创建一个图\n”);
printf(“输入图中顶点数、边数:“);
cin>>n>>m;
printf(“输入每条边相连的两点:\n”);
while(m–)
{
int x,y;
cin>>x>>y;
a[x][y]=a[y][x]=1;//无向图
}
printf(“创建完成!\n”);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<a[i][j]<<” “;
}
cout<<endl;
}//输出矩阵
}
void dfs(int i)//深度优先搜索
{
mark[i]=1;
cout<<i<<” “;
for(int j=1;j<=n;j++)
{
if(mark[j]==0&&a[i][j]==1)//顶点未访问且连通
{
mark[j]=1;//被访问过标记为1
dfs(j);
}
}
}
void bfs(int i)//广度优先搜索
{
int t;
mark[i]=1;
queue<int>q;
q.push(i);//1入队列
while(!q.empty())//队列不为空
{
t=q.front();//队头元素
cout<<q.front()<<” “;
q.pop();//出队列
for(int j=1;j<=n;j++)
{
if(mark[j]==0&&a[t][j]==1)//顶点未访问且连通
{
mark[j]=1;//被访问过标记为1
q.push(j);//与此顶点连通的顶点都入队列
}
}
}
}
int main()
{
hanshu1();
memset(mark,0,sizeof(mark));//标记清零
printf(“深度优先搜索顺序为:“);
dfs(1);//从1开始
cout<<endl;
memset(mark,0,sizeof(mark));//标记清零
printf(“广度优先搜索顺序为:“);
bfs(1);//从1开始
cout<<endl;
return 0;
}