dfs——打印路径

来源:互联网 发布:win10网络共享密码设置 编辑:程序博客网 时间:2024/06/18 10:50

7-8 地下迷宫探索(30 分)

地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式。地道网是房连房、街连街、村连村的地下工事,如下图所示。

我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智。在现在和平发展的年代,对多数人来说,探索地下通道或许只是一种娱乐或者益智的游戏。本实验案例以探索地下通道迷宫作为内容。

假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关。请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起点?

输入格式:

输入第一行给出三个正整数,分别表示地下迷宫的节点数N(1

#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <queue>#include<stack>using namespace std;int N,E;int cnt=0;int edge[1010][1010];int book[1010];void dfs(int n){    cnt++;    book[n]++;    int flag=0;    for(int i=0;i<=N;i++){        if(edge[n][i]==1 && book[i]==0){            cnt++;            printf(" %d",i);            dfs(i);            flag=1;//标记为向下走了一层        }        if(flag==1)//回来时也打印该点            printf(" %d",n);        flag=0;//标记取消,表示没有向下一层走    }}void bfs(int n);int main(){    int n;    cin >> N >> E >> n;    int a,b;    for(int i=0;i<E;i++){        cin >> a >> b;        edge[a][b]=edge[b][a]=1;    }    printf("%d",n);    dfs(n);    if(cnt<N)        printf(" 0");    return 0;}