来源:2013年浙江大学复试机试模拟题

17 篇文章 0 订阅
  1. ********************************* 
  2. *   日期:2013-3-23 
  3. *   作者:SJF0115 
  4. *   题号: 题目1531: One Day Tour In ZJU 
  5. *   来源:http://acmclub.com/problem.php?id=1531 
  6. *   结果:AC 
  7. *   来源:2013年浙江大学复试机试模拟题 
  8. *   总结: 
  9. **********************************/  
  10. #include<stdio.h>  
  11. #include<string.h>  
  12. int n,m,ok;  
  13. int vis[22],Map[22][22];  
  14.   
  15. //搜索,已经访问count个地方现在处于location点  
  16. void DFS(int location,int count)  
  17. {  
  18.     int i;  
  19.     //已经全部访问完  
  20.     if(count == n){  
  21.         //到达目的地n  
  22.         if(location == n){  
  23.             ok = 1;  
  24.         }  
  25.         return;  
  26.     }  
  27.     //没有访问完,访问下一处  
  28.     for(i = 1;i <= n;i++){  
  29.         //i点没访问过且能访问则去i点  
  30.         if(Map[location][i] == 1&& vis[i] == 0){  
  31.             //标记i已经访问过  
  32.             vis[i]=1;  
  33.             //递归下一处  
  34.             DFS(i,count+1);  
  35.             if(ok == 1){  
  36.                 return;  
  37.             }  
  38.             //取消标记  
  39.             vis[i] = 0;  
  40.         }  
  41.     }  
  42. }  
  43. //初始化  
  44. void Init()  
  45. {  
  46.     int i,j,start,end;  
  47.     //初始化地图  
  48.     for(i = 1;i <= n;i++){  
  49.         for(j = 1;j <= n;j++){  
  50.             Map[i][j]=0;  
  51.         }  
  52.     }  
  53.     //添加路况  
  54.     for(i = 0;i < m;i++){  
  55.         scanf("%d %d",&start,&end);  
  56.         //end和start之间联通  
  57.         Map[start][end]=1;  
  58.         Map[end][start]=1;  
  59.     }  
  60.     memset(vis,0,sizeof(vis));  
  61.     ok = 0;  
  62.     //1为出发点  
  63.     vis[1]=1;  
  64. }  
  65. int main()  
  66. {  
  67.     while(scanf("%d %d",&n,&m)!=EOF){  
  68.         Init();  
  69.         DFS(1,1);  
  70.         printf("%d\n",ok);  
  71.     }  
  72.     return 0;  
  73. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值