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

    xiaoxiao2022-07-13  156

    #include <iostream> #include <vector> #include <algorithm> #define maxn 1001 using namespace std; vector<int>v[maxn]; vector<int>result; bool visited[maxn]= {false}; int n,m,s; void dfs(int s) { result.push_back(s); visited[s]=true; for(int i=0; i<v[s].size(); ++i) { if(visited[v[s][i]]==false) { dfs(v[s][i]); result.push_back(s); //回溯的地方 } } } int main() { cin>>n>>m>>s; for(int i=0; i<m; ++i) { int a,b; cin>>a>>b; v[a].push_back(b); v[b].push_back(a); } for(int i=1; i<=n; ++i) { sort(v[i].begin(),v[i].end());//排序 } dfs(s); for(int i=0; i<result.size(); ++i) { if(i==0) cout<<result[i]; else cout<<" "<<result[i]; } int cnt=0; for(int i=1; i<=n; ++i) { if(visited[i]==true) cnt++; } if(n!=cnt)//如果不通 { cout<<" "<<0; } return 0; }

    深度遍历 然后再回溯  

    最新回复(0)