https://www.luogu.org/problem/P5022
60分思路其实很简单,从1开始搜索,每搜索到一个点就记录下,然后当搜索结束后,也就所有的结点搜索过一遍之后,结束。
其实就是问我们dfs访问图的顺序是什么样子的,直接用dfs遍历每个点,输出遍历的顺序就好了
题目的关键是:或者沿着第一次访问该 城市时经过的道路后退到上一个城市。
这就说明路径可能不是一条线,可能是多条线。
#include<iostream>
#include<cstdio>
#define LEN 5001
using namespace std;
int step = 1;
int book[LEN] = {0};
int myMap[LEN][LEN] = {0};
int m, n;
int dfs(int current)
{
if(step == n)
{
return 0;
}
for(int i = 1; i<=n; i++)
{
if(myMap[current][i] == 1 and book[i] == 0)
{
book[i] = 1;
step += 1;
cout<<i<<" ";
dfs(i);
}
}
}
int main()
{
cin>>n>>m;
for(int i = 1; i<=m; i++)
{
int u, v;
cin>>u>>v;
myMap[u][v] = 1;
myMap[v][u] = 1;
}
book[1] = 1;
cout<<1<<" ";
dfs(1);
return 0;
}
100分代码思考中
从中我发现几个问题,希望自己能够解决:
1.给定一个图,用dfs遍历每一个结点,输出遍历的路劲
2.给定一个图,遍历每一个结点一次,那么有多少中不同遍历顺序。
尝试了很久一直卡在68分。。。。。。
从两点一直卡到五点左右,将近四个小时。。。眼睛都瞎了。
总结一下:
1.自己图论的基础习题做的不够多。
2.心态很重要。考场上的应对策略是先拿到60分,然后再思考100分。
3.以后给自己定个闹钟,超过一个小时的题目就不写了。60分就够用了。