dfs深度优先遍历(邻接矩阵+邻接表)
程序员文章站
2022-05-19 19:57:29
...
今天看到了数据结构的图中的深度优先遍历,一共有两种形式,邻接矩阵和邻接表,下面给出两种方式的代码
具体算法原理书上讲的很清楚,在此不赘述了。(小白的dfs笔记)
邻接矩阵的代码:
#include <iostream>
#include <bits/stdc++.h>
#define maxn 10000
using namespace std;
const int inf=99999;
int e[maxn][maxn];
bool visit[maxn];
int m,n;
void dfs(int u,int depth)
{
visit[u]=true;
for(int v=0;v<n;v++)
{
if(visit[v]==false&&e[u][v]!=inf)
{
printf("%d ",e[u][v]);
dfs(v,depth+1);
}
}
}
void dfstrave()
{
for(int u=0;u<n;u++)
{
if(visit[u]==false)
dfs(u,1);
}
}
int main()
{
scanf("%d %d",&m,&n);
fill(e[0],e[0]+maxn*maxn,inf);
fill(visit,visit+maxn,false);
int a,b,c;
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&a,&b,&c);
e[a][b]=c;
e[b][a]=c;
}
dfstrave();
return 0;
}
邻接表的代码:
vector<int>adj[maxn];
void dfs(int u,int depth)
{
visit[u]=true;
for(int i=0;i<adj[u].size();i++)
{
int v=adj[u][i];
if(visit[v]==false)
{
dfs(v,depth+1);
}
}
}
void dfstrave()
{
for(int u=0;u<n;u++)
{
if(visit[u]==false)
dfs(u,1);
}
}
下一篇: 游戏的交互定位(转)