渣渣ACM日记——33-蛇形填数(NYOJ)

蛇形填数

时间限制: 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>
#include <cstring>
using namespace std;
int main(){
	bool book[105][105];
	int map[105][105];
    int n;
	int i,j;
	while(cin>>n){
		memset(book,0,sizeof(book));
		int now=1;
		for(i=0;i<n;i++){
			for(j=n-1;j>=0;j--)
		{
			if(book[i][j]==0){
				int x=i,y=j;
				//下 
				while(x<n&&book[x][y]==0){
					map[x][y]=now++;
					book[x][y]=1;
					x++;
				}
				x--;y--;					
				//左
				while(y>=0&&book[x][y]==0){
					map[x][y]=now++;
						book[x][y]=1;
						y--;
				}
				y++;x--;	
				//上
				while(x>=0&&book[x][y]==0){
						book[x][y]=1;
					map[x][y]=now++;
					x--;
				}
				x++;y++;
				//右 
				while(y<n&&book[x][y]==0){
					book[x][y]=1;
					map[x][y]=now++;
					y++;
				}
			}			
		}
	}
        	for(i=0;i<n;i++){
				for(j=0;j<n;j++)
				cout<<map[i][j]<<" ";
				cout<<endl;
		}		
}
	return 0;
}
        


你可能感兴趣的:(渣渣ACM日记——33-蛇形填数(NYOJ))