运行效果:
代码学习:
#include<iostream> using namespace std; int def[101][101]={0}; int count=0; void chess(int a,int b,int aa,int bb,int size){ if(size==1){ return ; } int s=size/2; count++; int c=count; //左上角 if(aa<a+s&&bb<b+s){ chess(a,b,aa,bb,s); } else{ def[a+s-1][b+s-1]=c; chess(a,b,a+s-1,b+s-1,s); } //左下角 if(aa>=a+s&&bb<b+s){ chess(a+s,b,aa,bb,s); } else{ def[a+s][b+s-1]=c; chess(a+s,b,a+s,b+s-1,s); } //右上角 if(aa<a+s&&bb>=b+s){ chess(a,b+s,aa,bb,s); } else{ def[a+s-1][b+s]=c; chess(a,b+s,a+s-1,b+s,s); } //右下角 if(aa>=a+s&&bb>=b+s){ chess(a+s,b+s,aa,bb,s); } else{ def[a+s][b+s]=c; chess(a+s,b+s,a+s,b+s,s); } } int main(){ int a,b,aa,bb,size,n; int k=3; while(k--){ cout<<"请输入棋盘大小:"; cin>>size; n=size; a=b=1; cout<<"请输入棋盘棋子特殊位置===>"<<endl; cout<<"特殊点的横坐标:"; cin>>aa; cout<<endl; cout<<"特殊点的纵坐标:"; cin>>bb; cout<<endl; chess(a,b,aa,bb,size); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout.width(4); cout<<def[i][j]; if(j==n){ cout<<endl; } } } cout<<"==================================="<<endl; } return 0; }
Nearth==>分治策略005/棋盘覆盖算法
最新推荐文章于 2022-09-25 10:40:49 发布