2026/4/15 6:18:58
网站建设
项目流程
做网站6个月心得,库尔勒市建设路街道办网站,做网站淘汰了,网站 php连接mysql 代码【题目描述】农民John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。John是一个与其他农民一样懒的人。他讨厌骑马#xff0c;因此从来不两次经过一个一个栅栏。你必须编一个程序#xff0c;读入栅栏网络的描述#xff0c;并计算出一条修栅栏的路径…【题目描述】农民John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。John是一个与其他农民一样懒的人。他讨厌骑马因此从来不两次经过一个一个栅栏。你必须编一个程序读入栅栏网络的描述并计算出一条修栅栏的路径使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马在任意一个顶点结束。每一个栅栏连接两个顶点顶点用1到500标号(虽然有的农场并没有500个顶点)。一个顶点上可连接任意多(≥1)个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。你的程序必须输出骑马的路径(用路上依次经过的顶点号码表示)。我们如果把输出的路径看成是一个500进制的数那么当存在多组解的情况下输出500进制表示法中最小的一个 (也就是输出第一个数较小的如果还有多组解输出第二个数较小的等等)。 输入数据保证至少有一个解。【输入】第1行:一个整数F(1≤F≤1024)表示栅栏的数目;第2到F1行:每行两个整数i,j(1≤i,j≤500)表示这条栅栏连接i与j号顶点。【输出】输出应当有F1行每行一个整数依次表示路径经过的顶点号。注意数据可能有多组解但是只有上面题目要求的那一组解是认为正确的。【输入样例】9 1 2 2 3 3 4 4 2 4 5 2 5 5 6 5 7 4 6【输出样例】1 2 3 4 2 5 4 6 5 71. 什么是欧拉路一笔画简单来说就是“走完所有的边且每条边只走一次”。如果能回到起点叫欧拉回路。如果回不到起点叫欧拉通路。做这种题别去脑补怎么画直接套用Hierholzer 算法DFS 栈。2. 踩坑提醒这两个地方最容易wa刚才做题时我有两个地方写错了调了半天才发现。这两个坑非常典型同学们一定要注意易错点一邻接矩阵要存“数量”而不是“状态”错误写法g[u][v] 1;原因题目中两个点之间可能有多条边比如 1 和 2 之间有两道栅栏。如果只存 1就会覆盖掉之前的边导致少走一条路。正确写法用g[u][v]累加边的数量删边时用g[u][v]--。易错点二起点的选择逻辑错误写法只找奇点度数为奇数的点出发找不到就直接结束。原因如果是一张欧拉回路图所有点度数都是偶数循环里根本找不到奇点程序会没有任何输出。正确写法优先找奇点如果有一定是 2 个选编号小的那个。如果没找到奇点说明是回路默认从编号最小的有边节点通常是 1出发。3. 核心算法逻辑不要在“进递归”的时候输出要在“回溯”路走不通了要退回来的时候把点记录下来。因为我们是在“退回来”的时候记录的所以路径是倒序的。解决办法用一个 栈把点存进去最后弹出来就是正序路径。4.完整代码#include iostream #include stack //因为是倒着回溯输出的所以输出与路线刚好相反就存进栈 using namespace std; int g[510][510]; int d[510];//记录每个节点连接的边数 int ma1;//记录有多少个点 stackint s; void dfs(int x){ for(int i1;ima;i){ if(g[x][i]0){//如果有栅栏就必须走 g[x][i]--;//然后把栅栏标记为走过 g[i][x]--; dfs(i); } } //路走完了回溯时进栈 s.push(x); } int main(){ int f; cinf; for(int i1;if;i){ int u,v; cinuv;//栅栏是双向的 g[u][v];//容易出错的地方 可能不止一个栅栏 g[v][u]; d[u]; d[v]; mamax(ma,u); mamax(ma,v); } for(int i1;ima;i){ if(d[i]%21){//如果是欧拉通路 无向图一笔画要从连接奇数个边的点作为起点 dfs(i); while(!s.empty()){//栈先入后出原则 刚好把倒着存进去的按照正确路线输出 couts.top()endl; s.pop(); } return 0; } } //没有找到连接奇数个边的点就是欧拉回路 dfs(1); while(!s.empty()){//栈先入后出原则 刚好把倒着存进去的按照正确路线输出 couts.top()endl; s.pop(); } return 0; }5. 总结遇到“经过所有边”的题先看度数判断能不能画出来奇点只能是 0 个或 2 个。用邻接矩阵存边防重边。DFS 回溯入栈最后倒序输出。