首页 > 其他 > 详细

Ka的回溯编程练习 Part3|马的遍历

时间:2015-05-19 18:48:12      阅读:129      评论:0      收藏:0      [点我收藏+]
 1 #include <stdio.h>
 2 int board[100][3]={0},totally=0;
 3 int x[4]={2,1,-1,-2},y[4]={1,2,2,1};
 4 void o(int k) //这个输出函数需要借助回溯中n的值来完成输出 
 5 {
 6     totally++;
 7     printf("%d:",totally);
 8     int r;
 9     for(r=1;r<=k-1;r++)
10         printf("|%d,%d|->",board[r][1],board[r][2]);
11     printf("|4,8|\n"); //最后一个另外输出 
12 }
13 int search(int n)
14 {
15     int i;
16     for(i=0;i<=3;i++)
17     {
18         if(board[n-1][1]+x[i]<=4&&  //之前的坐标进行该种跳跃不会越界的话
19            board[n-1][1]+x[i]>=0&&
20            board[n-1][2]+y[i]>=0&&
21            board[n-1][2]+y[i]<=8)
22           {
23                board[n][1]=board[n-1][1]+x[i];
24                board[n][2]=board[n-1][2]+y[i];
25                if(board[n][1]==4&&board[n][2]==8) o(n);
26                else search(n+1);//不必担心对n没有限制,因为n如果太大会因为越界不发进入此if 
27                //因为下一次操作会重置board,不必再重新调回0。 
28            }
29     }
30 }
31 int main()
32 {
33     search(2);  //第一个点的坐标已经通过初始化确定为0.0,则从第二个点开始寻找
34     return 0;
35 }

看注释啦啦啦

Ka的回溯编程练习 Part3|马的遍历

原文:http://www.cnblogs.com/KakagouLT/p/4515136.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!