#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<stack>
#define MAX 100
using namespace std;
typedef struct
{ int dian[MAX];
int cost[MAX][MAX]; //邻接矩阵
int v; //顶点数
int e; //边数
}TU;
bool visited[MAX];
void creattu(TU &G)
{
int v,e,i,j,k,v1,v2,x;
scanf("%d%d",&v,&e);
G.v=v; //这里自己忘记了给图初始话
G.e=e; //注意**
/* for(i=1;i<=v;i++)
{
scanf("%d",&x);
G.dian[i]=x;
}*/
for(i=1;i<=v;i++)
{
for(j=1;j<=v;j++)
G.cost[i][j]=0; //初始化所有的边都为0表示没有边
visited[i]=false;
}
for(k=1;k<=e;k++)
{
scanf("%d%d",&v1,&v2); //这里可以再加一个变量,输入他然后让下面的等于他即可,这就给边带上了权值
G.cost[v1][v2]=1;
G.cost[v2][v1]=1; //不加这一句就是有向图,加上就是无向图
}
}
void DFS(TU &G,int n)
{
int j;
printf("%d ",n);
visited[n]=true;
for(j=1;j<=G.v;j++)
{
if((G.cost[n][j]!=0)&&(visited[j]==false))
DFS(G,j);
}
}
void BFS(TU G,int v) //广度优先搜索
{
for(int i=1;i<=G.v;i++) //初始化
{
visited[i]=false;
}
queue<int> Q; //STL模板中的queue
printf("%d ",v);
visited[v]=true;
Q.push(v);
while(!Q.empty())
{
int i,j;
i=Q.front(); //取队首顶点
Q.pop();
for(j=1;j<=G.v;j++) //广度遍历
{
if(G.cost[i][j]!=0&&visited[j]==false)
{
printf("%d ",j);
visited[j]=true;
Q.push(j);
}
}
}
}
int main()
{ int j;
TU G;
creattu(G);
scanf("%d",&j);
DFS(G,j);
scanf("%d",&j);
BFS(G,j);
}
图的邻接表简易代码风格
最新推荐文章于 2023-02-07 12:18:48 发布