返回列表 回复 发帖

关于数据结构的迷宫问题

谁能给我一个关于数据结构的迷宫问题的代码阿
转贴一篇:
  1. 运行时提示输入起始和终止坐标,这个坐标是迷宫按行展开之后的序号,从0开始,比如输入“13,18”表示搜索由第13格到第18格的可达路径,它会把所有可能的路径都以图形式输出,“X”表示墙,“.”表示空,“1”表示足迹,如果不可达或者开始坐标是墙,则输出“目标不可达”提示,参考程序如下,具体迷宫表示形式可修改,只要把对应字符一换就可以了:
  2. #include<stdio.h>
  3. #include<math.h>
  4. #define N 12
  5. int search(int,int);
  6. int canplace(int,int);
  7. int isaim(int,int);
  8. void readdata();
  9. void printfresult();
  10. int a[20][20],s,t,sign=0;
  11. int isaim(int,int);
  12. void main()
  13. {
  14. int row,col;
  15. readdata();
  16. row = s/N;
  17. col = s%N;
  18. search(row,col);
  19. if(sign==0)
  20. printf("目标不可达\n");
  21. }
  22. int search(int row,int col)
  23. {
  24. int r,c;
  25. if(a[row][col]==-2)
  26. return 0;
  27. a[row][col] = 1;
  28. if(isaim(row,col))
  29. printfresult();
  30. r = row; //左
  31. c = col-1;
  32. if(canplace(r,c))
  33. search(r,c);
  34. r = row+1; //下
  35. c = col;
  36. if(canplace(r,c))
  37. search(r,c);
  38. r = row; //右
  39. c = col+1;
  40. if(canplace(r,c))
  41. search(r,c);
  42. r = row-1; //上
  43. c = col;
  44. if(canplace(r,c))
  45. search(r,c);
  46. a[row][col] = 0;
  47. }
  48. void printfresult()
  49. {
  50. int i,j;
  51. printf("\nThe result follow as:\n");
  52. for(i=0;i<N;i++)
  53. {
  54. for(j=0;j<N;j++)
  55. {
  56. if(a[i][j]==0)
  57. printf(" .");
  58. else if(a[i][j]==1)
  59. printf(" 1");
  60. else
  61. printf(" X");
  62. }
  63. printf("\n");
  64. }
  65. printf("------------------");
  66. sign=1;
  67. }
  68. int canplace(int r,int c)
  69. {
  70. if(r>=0&&r<N&&c>=0&&c<N&&a[r][c]==0)
  71. return 1;
  72. else
  73. return 0;
  74. }
  75. int isaim(int r,int c)
  76. {
  77. if(r==t/N&&c==t%N)
  78. return 1;
  79. else
  80. return 0;
  81. }
  82. void readdata()
  83. {
  84. int i,j;
  85. char str[12][12]={{'X','X','X','X','X','X','X','X','X','X','X','X'},
  86. {'X','.','.','.','.','.','.','X','.','X','X','X'},
  87. {'X','.','X','.','X','X','.','.','.','.','.','X'},
  88. {'X','.','X','.','X','X','.','X','X','X','.','X'},
  89. {'X','.','X','.','.','.','.','.','X','.','.','X'},
  90. {'X','.','X','X','X','X','X','X','X','X','X','X'},
  91. {'X','.','.','.','X','.','X','.','.','.','.','X'},
  92. {'X','.','X','X','X','.','.','.','X','X','X','X'},
  93. {'X','.','.','.','.','.','X','X','.','.','.','X'},
  94. {'X','X','X','.','X','X','X','X','.','X','.','X'},
  95. {'X','X','X','X','X','X','X','X','.','X','X','X'},
  96. {'X','X','X','X','X','X','X','X','X','X','X','X'},
  97. };
  98. printf("Please input start and end value:"); //for example:13,128
  99. scanf("%d,%d",&s,&t);
  100. printf("The initial state:\n");
  101. for(i=0;i<N;i++)
  102. {
  103. for(j=0;j<N;j++)
  104. {
  105. if(str[i][j]=='.')
  106. a[i][j] = 0;
  107. else
  108. a[i][j] = -2;
  109. printf(" %c",str[i][j]);
  110. }
  111. printf("\n");
  112. }
  113. printf("-----------------\n");

  114. }
复制代码
为了促进网友之间的交流,本站恢复电脑爱好者QQ群:50848339,只有本站会员才可申请加入
不懂,,,哎。还要学习学习再学习啊
返回列表