应用场景:小游戏
本代码运用的是分治法的思想
我的编译过程中错误点:
cout<<setw(4)<<board[x][y];
中的setw(4)错误的原因是没有添加头文件
这是在头文件<iomanip.h>里的,编译找不到的原因
分治法:
#include <iostream>
#include<iomanip>
using namespace std;
int size;
int i,j;
int board[100][100];
int t;
void ChessBoard(int tr,int tc,int dr,int dc,int size){
int s,t1;
if(size==1)
return;
t1=++t;
s=size/2;
if(dr<tr+s&&dc<tc+s)
ChessBoard(tr,tc,dr,dc,s);
else{
board[tr+s-1][tc+s-1]=t1;
ChessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
if(dr<tr+s&&dc>=tc+s)
ChessBoard(tr,tc+s,dr,dc,s);
else{
board[tr+s-1][tc+s]=t1;
ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
}
if(dr>=tr+s&&dc<tc+s)
ChessBoard(tr+s,tc,dr,dc,s);
else{
board[tr+s][tc+s-1]=t1;
ChessBoard(tr+s,tc,tr+s,tc+s-1,s);
}
if(dr>=tr+s&&dc>=tc+s)
ChessBoard(tr+s,tc+s,dr,dc,s);
else{
board[tr+s][tc+s]=t1;
ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
}
}
int main(){
printf("input size(必须是2^k格式)\n");
cin>>size;
printf("请输入特殊放个的坐标:");
cin>>i>>j;
ChessBoard(0,0,i,j,size);
for(int x=0;x<size;x++){
for(int y=0;y<size;y++){
cout<<setw(4)<<board[x][y];
}
printf("\n");
}
return 0;
}
时间复杂度:O(4^k);
本人原创,转载需告知;