马踏棋盘算法(回溯算法、X*Y图的邻接矩阵深度优先遍历)
来源:互联网 发布:陌生人朋友圈查看 软件 编辑:程序博客网 时间:2024/05/16 12:27
马踏棋盘算法(回溯算法、X*Y图的邻接矩阵深度优先遍历)
#include <stdio.h>#include <time.h>#define X 8#define Y 8int chess[X][Y];//找到基于(x,y)位置的下一个可走的位置int nextxy(int* x,int* y,int count){ switch(count) { case 0: if(*x+2<=X-1&&*y-1>=0&&chess[*x+2][*y-1]==0) { *x+=2; *y-=1; return 1; } break; case 1: if(*x+2<=X-1&&*y+1<=Y-1&&chess[*x+2][*y+1]==0) { *x+=2; *y+=1; return 1; } break; case 2: if(*x+1<=X-1&&*y-2>=0&&chess[*x+1][*y-2]==0) { *x+=1; *y-=2; return 1; } break; case 3: if(*x+1<=X-1&&*y+2<=Y-1&&chess[*x+1][*y+2]==0) { *x+=1; *y+=2; return 1; } break; case 4: if(*x-2>=0&&*y-1>=0&&chess[*x-2][*y-1]==0) { *x-=2; *y-=1; return 1; } break; case 5: if(*x-2>=0&&*y+1<=Y-1&&chess[*x-2][*y+1]==0) { *x-=2; *y+=1; return 1; } break; case 6: if(*x-1>=0&&*y-2>=0&&chess[*x-1][*y-2]==0) { *x-=1; *y-=2; return 1; } break; case 7: if(*x-1>=0&&*y+2<=Y-1&&chess[*x-1][*y+2]==0) { *x-=1; *y+=2; return 1; } break; default: break; } return 0;}void print(){ int i,j; for(i=0;i<X;i++) { for(j=0;j<Y;j++) { printf("%2d\t",chess[i][j]); } printf("\n"); } printf("\n");}//深度优先遍历棋盘算法//(x,y)为位置坐标//tag是标记变量,每走一步,tag+1int TravelChessBoard(int x,int y,int tag){ int x1=x,y1=y,flag=0,count=0; chess[x][y]=tag; if(X*Y==tag) { print(); //打印棋盘 return 1; } //找到马的下一个可走的坐标(x1,y1),如果找到flag=1,否则为0 flag = nextxy(&x1,&y1,count); while(0==flag && count <7) { count++; flag = nextxy(&x1,&y1,count); } while(flag) { if(TravelChessBoard(x1,y1,tag+1)) { return 1; } //继续找到马的下一个可走的坐标(x1,y1),如果找到flag=1,否则为0 x1=x; y1=y; count++; flag = nextxy(&x1,&y1,count); while(0==flag && count <7) { count++; flag = nextxy(&x1,&y1,count); } } if(0==flag) { chess[x][y]=0; } return 0;}int main(){ int i,j; clock_t start,finsh; start=clock(); for(i=0;i<X;i++) for(j=0;j<Y;j++) { chess[i][j]=0; } if(!TravelChessBoard(2,0,1)) { printf("抱歉,马踏棋盘失败鸟\n"); } finsh=clock(); printf("本次计算用时%f秒\n\n",(double)(finsh-start)/CLOCKS_PER_SEC); return 0;}
0 0
- 马踏棋盘算法(回溯算法、X*Y图的邻接矩阵深度优先遍历)
- 图的邻接矩阵生成算法,深度优先遍历算法,广度优先遍历算法,Prime算法。):
- 算法与数据结构实验5:图的深度和广度优先遍历(邻接矩阵)
- 邻接矩阵深度与广度优先遍历算法(c++实现)
- 关于 马走棋盘 (骑士遍历)的深度优先算法
- 图(邻接矩阵存储)的广度优先遍历算法
- [算法]图(邻接矩阵)的深度遍历
- 八皇后问题深度优先遍历回溯算法的应用
- 无向图的邻接矩阵,深度优先遍历和广度优先遍历的递归与非递归算法
- 无向图的邻接矩阵,深度优先遍历广度优先遍历的递归与非递归算法
- 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
- 图:广度深度优先遍历(邻接矩阵)
- 【c/c++ 算法/数据结构】 邻接矩阵表示图,深度,广度优先遍历 算法设计+代码+图片
- 图的深度优先遍历(用邻接矩阵表示图)
- SDUT 图的深度优先遍历(邻接矩阵表示)
- 图(邻接矩阵)的深度、广度优先遍历
- 深度优先算法、广度优先算法 与 图的遍历
- 图的深度优先遍历和广度优先遍历算法
- object-c中Foundation框架-日期和时间-----------包含定时器
- discuz!
- linux下IPTABLES配置详解
- linux修改默认时区
- ofbiz学习笔记1
- 马踏棋盘算法(回溯算法、X*Y图的邻接矩阵深度优先遍历)
- 关于指针的删除
- Hibernate 映射关系注解 属性详解
- 输入一个链表的头结点,从尾到头反过来打印出每个节点的值。
- App Store审查缩至24小时
- 无所事事并不是慢生活,是消极的活着
- PullToZoomScrollViewEx 下拉放大图片处理类
- linux之scp命令学习
- 什么事数据字典