7-5 地下迷宫探索 (30分)
程序员文章站
2022-06-08 08:10:02
...
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int flag = 0;
void Find(int x, vector<int> Nodes[10000], vector<int> input, int N)
{
input.push_back(x);
if (!Nodes[x].empty())
{
for (vector<int>::iterator it1 = Nodes[x].begin(); it1 != Nodes[x].end(); it1++)
{
vector<int>::iterator it2 = find(input.begin(), input.end(), *it1);
if (it2 == input.end()) //*it1的值不存在与judge中
{
cout << *(input.end() - 1) << " ";
Find(*it1, Nodes, input, N);
break;
}
}
flag++;
if (flag < N)
{
cout << *(input.end() - 1) << " ";
}
if (flag == N)
{
cout << *(input.end() - 1);
}
}
}
int main()
{
int N, M, S;
cin >> N >> M >> S;
vector<int> Nodes[10000]; //邻接表表示无向图
vector<int> input; //存储深度搜索路径
for (int i = 0; i < M; i++)
{
int front, last;
cin >> front >> last;
Nodes[front].push_back(last);
Nodes[last].push_back(front);
}
for (int i = 1; i < N + 1; i++)
{
//对每个Node中的值按升序排列
sort(Nodes[i].begin(), Nodes[i].end());
}
Find(S, Nodes, input, N);
//递归出来后再次判断flag是否小于N,即是否遍历完所有点
if (flag < N)
{
cout << 0;
}
return 0;
}
不管对错,只是记录下自己的学习过程
上一篇: 基础编程题目集 7-29 删除字符串中的子串 (20分)
下一篇: 河蚌肉的做法之色香味俱全