hdu 2181 哈密顿绕行世界问题,深度优先搜索求解

来源:互联网 发布:源码网easck 编辑:程序博客网 时间:2024/04/28 18:25

http://acm.hdu.edu.cn/showproblem.php?pid=2181

        这是我写的第一个博客,仅作为参考,大牛们见了不要见笑哈。

        本题首先就是要建立一个城市连接的地图,然后从起始位置开始深度优先遍历每一个城市找个满足条件的路径,给以打印。用以存储地图的开辟一个二维数组。其他基本比较简单。详细看下面的代码:

#include <stdio.h>#include <string.h>#define MAX 21#define bool int#define false 0#define true 1bool map[MAX][MAX];//实心体地图bool used[MAX];//标记城市走过int res[MAX];//保存当前走过的路径int num;//记录打印到了第几个int cas;void init(){int a, b, c, i;for(i = 1; i <= 20; ++ i){scanf("%d%d%d",&a, &b, &c);map[i][a] = true;map[i][b] = true;map[i][c] = true;}}void dfs(int dep, int count){int i, j;res[count] = dep;if(count == 19){if(map[dep][cas]){printf("%d:  ", ++ num);for(i = 0; i < 20; ++ i){printf("%d ", res[i]);}printf("%d\n", res[0]);}return;}for(j = 1; j <= 20; j ++){if(map[dep][j] && !used[j]){used[j] = true;dfs(j, count+1);used[j] = false;}}}int main(){/*freopen("input.txt","r+",stdin);freopen("output.txt","w+",stdout);*/memset(map,0,sizeof(map));init();while(scanf("%d",&cas), cas){num = 0 ;memset(used, false, sizeof(used));memset(res, 0, sizeof(res));used[cas] = true;dfs(cas, 0);}return 0;}


原创粉丝点击