`
coolsooner
  • 浏览: 1308037 次
文章分类
社区版块
存档分类
最新评论

迷宫问题 回溯法

 
阅读更多

描述:

给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。

输入:

多个测例。输入的第一行是一个整数n,表示测例的个数。接下来是n个测例,每个测例占21行,第一行四个整数x1,y1,x2,y2是起止点的位置(坐标从零开始),(x1,y1)是起点,(x2,y2)是终点。下面20行每行20个字符,’.’表示空格;’X’表示墙。

输出:

每个测例的输出占一行,输出Yes或No。

输入样例:

2
0 0 19 19
....................
XXXXXXXXXXXXXXXXXXXX
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
0 0 19 19
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
....................
.XXXXXXXXXXXXXXXXXXX
....................

输出样例:

No
Yes

解题思路:是根据四个方向不断的找下去,直到找到或是全部找一遍为止。

代码如下:

Code:
  1. #include<iostream>
  2. #include<cstdio>
  3. usingnamespacestd;
  4. chardata[21][21];
  5. intstate=0;
  6. voidback(intx1,inty1,intx2,inty2)
  7. {
  8. intxShift[4]={0,0,-1,1},yShift[4]={1,-1,0,0};//用来控制方向
  9. if(x1==x2&&y1==y2)
  10. {
  11. state=1;
  12. return;
  13. }
  14. data[x1][y1]='*';
  15. for(inti=0;i<4;i++)
  16. {
  17. x1=x1+xShift[i];y1=y1+yShift[i];
  18. if(data[x1][y1]=='.'&&y1>=0&&y1<20&&x1>=0&&x1<20)
  19. {
  20. if(x1==x2&&y1==y2)
  21. {
  22. state=1;
  23. return;
  24. }
  25. back(x1,y1,x2,y2);
  26. }
  27. x1=x1-xShift[i];y1=y1-yShift[i];//默认这个方向没有走下去
  28. }
  29. }
  30. intmain()
  31. {
  32. intn;
  33. cin>>n;
  34. while(n)
  35. {
  36. intx1,y1,x2,y2;
  37. cin>>x1>>y1>>x2>>y2;
  38. getchar();
  39. for(inti=0;i<20;i++)
  40. {
  41. for(intj=0;j<20;j++)
  42. scanf("%c",&data[i][j]);
  43. getchar();
  44. }
  45. back(x1,y1,x2,y2);
  46. if(state==1)
  47. {
  48. state=0;
  49. cout<<"Yes"<<endl;
  50. }
  51. else
  52. {
  53. cout<<"No"<<endl;
  54. }
  55. n--;
  56. }
  57. return0;
  58. }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics