nyoj 33 蛇形填数
蛇形填数
时间限制: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
1 #include <iostream> 2 using namespace std; 3 int a[105][105], visit[105][105],temp = 1, n; 4 5 /*void dfs(int i, int j){ 6 a[i][j] = temp; 7 visit[i][j] = 1; 8 temp++; 9 if(i+1 <= n-1 && visit[i+1][j] == 0) 10 dfs(i+1, j); 11 if(j-1 >= 0 && visit[i][j-1] == 0) 12 dfs(i, j-1); 13 if(i-1 >= 0 && visit[i-1][j] == 0) 14 dfs(i-1, j); 15 if(j+1 <= n-1 && visit[i][j+1] == 0) 16 dfs(i, j+1); 17 } 18 */ 19 20 int main(){ 21 cin >> n; 22 int i = 0, j = n-1; 23 a[0][n-1] = temp; 24 visit[0][n-1] = 1; 25 //dfs(0, n-1); 26 while(temp < n*n){ 27 while(i+1 < n && visit[i+1][j] == 0){ 28 visit[i+1][j] = 1; 29 a[++i][j] = ++temp; 30 } 31 32 while(j-1 >= 0 && visit[i][j-1] == 0){ 33 visit[i][j-1] = 1; 34 a[i][--j] = ++temp; 35 } 36 37 while(i-1 >= 0 && visit[i-1][j] == 0){ 38 visit[i-1][j] = 1; 39 a[--i][j] = ++temp; 40 } 41 42 while(j+1 < n && visit[i][j+1] == 0){ 43 visit[i][j+1] = 1; 44 a[i][++j] = ++temp; 45 } 46 47 } 48 for(int i = 0; i < n; i++){ 49 for(int j = 0; j < n; j++) 50 cout << a[i][j] << " "; 51 cout << endl; 52 } 53 return 0; 54 55 }
越努力,越幸运