蛇形填数

时间限制:3000 ms  |            内存限制:65535 KB
难度:3
 
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7  6  5 4
 
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3
 #include <iostream>
using namespace std;
int a[][], visit[][],temp = , n; /*void dfs(int i, int j){
a[i][j] = temp;
visit[i][j] = 1;
temp++;
if(i+1 <= n-1 && visit[i+1][j] == 0)
dfs(i+1, j);
if(j-1 >= 0 && visit[i][j-1] == 0)
dfs(i, j-1);
if(i-1 >= 0 && visit[i-1][j] == 0)
dfs(i-1, j);
if(j+1 <= n-1 && visit[i][j+1] == 0)
dfs(i, j+1);
}
*/ int main(){
cin >> n;
int i = , j = n-;
a[][n-] = temp;
visit[][n-] = ;
//dfs(0, n-1);
while(temp < n*n){
while(i+ < n && visit[i+][j] == ){
visit[i+][j] = ;
a[++i][j] = ++temp;
} while(j- >= && visit[i][j-] == ){
visit[i][j-] = ;
a[i][--j] = ++temp;
} while(i- >= && visit[i-][j] == ){
visit[i-][j] = ;
a[--i][j] = ++temp;
} while(j+ < n && visit[i][j+] == ){
visit[i][j+] = ;
a[i][++j] = ++temp;
} }
for(int i = ; i < n; i++){
for(int j = ; j < n; j++)
cout << a[i][j] << " ";
cout << endl;
}
return ; }
05-11 15:13