骑士问题
来源:互联网 发布:崩坏学园2淘宝 编辑:程序博客网 时间:2024/06/10 06:30
大一时候写的骑士问题,今天翻出来加了点注释.
主要的思想是:每次跳的地方是不容易到达的地方,这样更能接近解。
#include<iostream>#include<stdlib.h>#include<iomanip>using namespace std;static int a[8][8]={0};static int str[8][8]={8};static int x,y,i(0),k;static int row[8]={-1,-2,-2,-1,1,2,2,1};static int column[8]={2,1,-1,-2,-2,-1,1,2};void valuable();void print();void move(int);bool able(int,int);void go();void move(){ i++;a[x][y]=i;}int main(){ cout<<"please enter x(0-7): "; cin>>x; cout<<"please enter y(0-7): ";cin>>y; while(i<64){ go(); valuable(); move(); } print(); system("pause"); return 0;}//valuable 计算i,j坐标下可以走的步数 void valuable(){int i,j; for(i=0;i<=7;i++)for(j=0;j<=7;j++){ int q=0;int m,n; for(int k=0;k<=7;k++){m=i+row[k];n=j+column[k];if(able(m,n))q++; }str[i][j]=q;}}//bool able(int,int)bool able(int x,int y){if(x>=0&&x<8&&y>=0&&y<8&&a[x][y]==0)return true;return false;}//void print()void print(){ cout<<endl;int i,j;for(i=0;i<8;i++){for(j=0;j<8;j++)cout<<setw(4)<<a[i][j]; cout<<endl;}}//go()void go(){ int b[8]; //b数组用来计数 表示往哪个方向跳,哪个方向可以走的步数 int o,p,k,m,n,t; //初始为0 for(o=0;o<=7;o++) b[o]=0; for(k=0;k<=7;k++) { m=x+row[k]; n=y+column[k]; if(able(m,n)) b[k]=str[m][n]; } //b数组排序,按升序排列 for(o=0;o<7;o++) for(p=0;p<7;p++) if(b[p]>b[p+1]){ t=b[p+1]; b[p+1]=b[p]; b[p]=t; } //找到一个b中不为0的数 ,选一个最小的数,先走不好到达的地方。 int s; for(k=0;k<=7;k++) if(b[k]!=0){ s=b[k]; break;}//然后赋值下一步 for(k=0;k<=7;k++){ m=x+row[k]; n=y+column[k]; if(able(m,n)&&s==str[m][n]){ x=m; y=n; break; }} }
- 骑士问题
- 骑士问题
- 骑士问题
- 骑士问题
- 骑士问题
- 骑士旅行问题(骑士走棋盘)
- Josephus问题(圆桌骑士)
- 骑士周游问题
- 递归::骑士问题
- 骑士游历问题
- 骑士跳跃问题
- 骑士巡游问题算法
- 骑士遍历问题
- 骑士聚会问题
- 骑士旅行问题
- 骑士游历问题
- 初解骑士问题
- 8600 骑士问题
- PowerDesigner将PDM导出生成WORD文档--温习老知识
- OCP-1Z0-053-V13.02-652题
- hadoop:在vmare中配置的多个虚拟机CentOS配置静态ip,并能ping通windows主机,使得主机与虚拟机之间的网络互通
- 删除字符串前后的空格
- faweawfawefaf
- 骑士问题
- onInterceptTouchEvent和onTouchEvent调用时序
- <<Windows核心编程(第五版)>>第十章同步设备I/O与异步设备I/O:10.5接收I/O请求完成通知
- VirtualBox+CentOS 6.4 64bit+XEN 4.2
- 更改总帐科目未清项管理
- 安装Ubuntu分区的推荐方案及方法
- http://blog.csdn.net/xiaobao1186/article/details/8855075
- android 很多应用中用到的 listView + viewPager
- Java String.split()用法小结