返回题解分享
讨论 / 题解分享/ 帖子详情

蛇形填数2 - 题解

//
#include <iostream>
#include <cstdio>

using namespace std;
int res[100][100];

int main()
{
	int m,n;
	cin>>m>>n;
	int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
	//偏移量
	for(int x=0,y=n-1,d=0,k=1; x<m,y<n,k<=m*n ;k++)
	{
		res[x][y]=k;
		int a=x+dx[d],b=y+dy[d];
		if(a<0||a>=m||b>=n||b<0||res[a][b])
//res[a][b]是重复格子的情况,初始化数组为零,如果走过一遍格子会有数字,需要转弯
		{
			d=(d+1)%4;
		a=x+dx[d],b=y+dy[d];
	}//看是否撞墙或者走到重复的格子
		x=a,y=b;//没有的话就更新位置
	}
	
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%5d",res[i][j]);
		}
		cout<<endl;
	}
	return 0;
}
0 回复 0 转发 0 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!