马的Hamilton周游路线问题
来源:互联网 发布:抓包工具二次开发源码 编辑:程序博客网 时间:2024/06/02 15:19
#include<iostream>#include <iomanip>#include <queue>using namespace std;//在某一格子的八种走法int fx[]= {2,1,-1,-2,-2,-1,1,2};int fy[]= {-1,-2,-2,-1,1,2,2,1};typedef struct{ int x,y; //坐标 int number; //序号} Point; //棋盘中的格子//马周游的棋盘,注意使用的时候是从下表为1开始Point board[10000][10000];int n; //棋盘大小int step =1; //序号//输出结果void outputResult(int n){ for(int i=1; i<=n; i++) { cout<<endl<<endl; for(int j=1; j<=n; j++) { cout<<setw(3)<<board[i][j].number<<" "; } cout<<endl<<endl; }}bool check(int x,int y) { if(x<1 || y<1 || x>n || y>n || board[x][y].number != 0) return false; return true;}//下一位置有多少种走法int nextPosHasSteps(int x, int y){ int steps = 0; for (int i = 0; i < 8; ++i) { if (check(x + fx[i], y + fy[i])) steps++; } return steps;}//非递归的走法void horseRun(Point point){ queue<Point> pointQueue; pointQueue.push(point); Point temp; while(!pointQueue.empty()) { temp = pointQueue.front(); pointQueue.pop(); board[temp.x][temp.y].number = step++; int minStep = 8; int flag = 0; for(int i=0; i<8; i++) //出下一位置走法最少的进入对列 { int x=temp.x + fx[i]; int y=temp.y + fy[i]; if(check(x,y)) { if(nextPosHasSteps(x,y) <= minStep) { minStep = nextPosHasSteps(x,y); Point t; t.x = x; t.y = y; if(flag) pointQueue.pop(); pointQueue.push(t); flag = 1; } } } }}int main(){ cout<<"输入棋盘大小n:"; cin>>n; Point startPoint; cout<<"输入马周游起始位置x(1~n),y(1~n):"; cin>>startPoint.x>>startPoint.y; horseRun(startPoint); //输出结果 outputResult(n); return 0;}
参考网站
0 0
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线
- 马的Hamilton周游问题,O(N)解决,N表棋盘规模
- 求解马的周游路线
- 马的周游问题
- 1153. 马的周游问题
- 简单的马周游问题
- 1153. 马的周游问题
- 1153. 马的周游问题
- 1153 马的周游问题
- sicily 1152 简单的马周游问题
- sicily 1153 马的周游问题
- Sicily 1152 简单的马周游问题
- Sicily 1153 马的周游问题
- sicily 1153 马的周游问题
- sicily 1152 简单的马周游问题
- 零基础到实战,IT小白的进阶之路
- c语言数据结构补齐原则
- Android开发优化-布局优化
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- push后隐藏底部taBar
- 马的Hamilton周游路线问题
- Android系统的版本号与API的对应表
- coderforce 545D Queue
- Too many arguments to function call, expected 0, have 3
- RecyclerView android:layout_width="match_parent"无效
- Linux FTP的安装与配置
- centos 安装erlang
- IOS学习之页面之间的传值方式(Delegate/NSNotification/Block/NSUserDefault ,单例模式)
- android报错res\drawable-xhdpi\ic_Dianhua.png: Invalid file name: must contain only [a-z0-9_.]