邮递员在送信时,为了节省路途,自己规定:每次总是从n 个村子中选择其中一个合适的村子出发,途中每个村子仅且经过一次,送完所有的信。已知各个村子的道路连通情况

输出

所有符合要求的路线。如果没有输出“no road”。

【输入】 第一行:整数n:村子的个数。 接下来是一个n*n 的0、1 矩阵,表示n 个村子的连同情况,如:a[i,j]=1 ,表示第i 和第j 个村子之间有路可走,如果a[i,j]=0,表示他们之间无路可走。

【输出】

按序号从小到大输出所有可行的线路

输入:

7 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 输出: 2 3 7 6 5 1 4 3 7 6 5 2 1 4 4 1 2 3 7 6 5 4 1 2 5 6 7 3 4 1 5 2 3 7 6 4 1 5 6 7 3 2 5 6 7 3 2 1 4 6 7 3 2 5 1 4

这个邮递员是不是脑子有泡,把哪个村庄经历两遍能死呀

然后他竟然还要我找到每一条可行线路,一条路还不够你走的呀

你知道你走的这么任性给我带来多大的困扰吗!

接下来是答案

 1 int dfs(int a,int tot)
 2 {
 3     if(tot == n) 就输出这个顺序;
 4     vis[x] = 1;//让这个点被访问过 
 5     b[j++] = x;//记录这个点的坐标 
 6     for(int i = 1;i <= n;i++)
 7     {
 8         if(vis[i] == 0 && a[i][x] == 1)//如果这个点没有被访问过并且有路,那就继续从这个点开始新一轮搜索 
 9         {
10             dfs(i,tot + 1);    
11             j--;//如果搜索的过程中没有发现合适的点,那我们就回溯 
12             vis[x] = 0; 
13         }
14     } 
15 }

这就是这个代码里的搜索部分,其他的我就不多写了昂,反正我也不太会

好了就这样了我要去学化学了,化学使我快乐(强颜欢笑)