您的位置:首页 > 其它

bfs,dfs遍历图的模板

2017-01-31 13:16 411 查看
/*bfs,dfs模板,遍历无向图*/
#include <cstdio>
#include <cstring>
#include <queue>
#define N 100
#define INF 0x3f3f3f

using namespace std;

int n, m;
int map

;//可达矩阵,1表示可达,0表示不可达。
int vis
;//记录顶点是否已被访问
int cnt;

void initgraph()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j)
map[i][j] = 0;
else
map[i][j] = INF;
}
}
}

void creatgraph()
{
int x, y;
for (int i = 0; i < m; i++)
{
scanf("%d%d", &x, &y);
map[x][y] = map[y][x] = 1;//无向图
}
}

void dfs(int cur)
{
printf("%d ", cur);
cnt++;
if (cnt == n)
return;
else
{
for (int i = 1; i <= n; i++)
{
if (map[cur][i] == 1 && !vis[i])
{
vis[i] = 1;
dfs(i);
}
}
}
}

void bfs(int cur)
{
queue<int> q;
while (!q.empty())	q.pop();//初始化队列
q.push(cur);//第一个元素进队列

while (!q.empty())
{
for (int i = 1; i <= n; i++)
{
if (map[q.front()][i] == 1 && !vis[i])
{
q.push(i);
vis[i] = 1;
}
}
printf("%d ", q.front());
q.pop();
}
}

int main()
{
initgraph();
creatgraph();

cnt = 0;
vis[1] = 1;//标记第一个顶点
//dfs(1);
bfs(1);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bfs dfs 模板