還在想有沒有比較好的方式繞出陣列
#include <iostream>
#include <iomanip>
using namespace std;
const int MSIZE=101;
unsigned int T,N,M,index,m[MSIZE][MSIZE];
int way[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
//清空所有陣列
void clear(){
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
m[i][j]=0;
}
//判斷是否超出範圍
bool check(int i,int add){
if (i+add<1||i+add>N)
return false;
return true;
}
//判斷是否已經使用過
bool isUsed(int x,int y){
if(m[y][x]==0)
return false;
return true;
}
//寫入陣列
void writein(int x,int y,int count){
count++;//當前位置計算;
m[y][x]=count;//給數字;
if(count==N*N){
return;//飽和;
}
if(M==1){
//判斷X,Y範圍正常 && 未使用過;
if(check(x,way[index][0]) && check(y,way[index][1]) && !isUsed(x+way[index][0],y+way[index][1])){
writein(x+way[index][0] , y+way[index][1] , count);
}
else{
index=(index+1)%4;
writein(x+way[index][0] , y+way[index][1] , count);
}
}
else{
//判斷X,Y範圍正常 && 未使用過;
if(check(x,way[index][1]) && check(y,way[index][0]) && !isUsed(x+way[index][1],y+way[index][0])){
writein(x+way[index][1] , y+way[index][0] , count);
}
else{
index=(index+1)%4;
writein(x+way[index][1] , y+way[index][0] , count);
}
}
}
//輸出陣列
void show(){
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
cout << setw(5) << m[i][j];
}
cout << endl;
}
}
int main()
{
cin>>T;
while(T--){
cin>>N>>M;
index=0;
clear();
writein(1,1,0);
show();
}
return 0;
}