链接:https://www.nowcoder.com/acm/contest/114/A
来源:牛客网
思路:用数组代替方向
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define N 1005 4 5 int ma[N][N],dir[2][4]={{1,0,-1,0},{0,1,0,-1}};//方向数组 6 int n,m; 7 8 bool judge(int xx,int yy)//判断下一格是否可走 9 { 10 if (xx<1||xx>n||yy<1||yy>n||ma[xx][yy]==1) 11 { 12 return false; 13 } 14 return true; 15 } 16 17 void solve(int x,int y) 18 { 19 int i,xx,yy;//xx,yy为下一格 20 memset(ma,0,sizeof(ma)); 21 ma[x][y]=1;//注意要放在memset后面,否则会死循环 22 for (i=0;m>0;) 23 { 24 xx=x+dir[0][i]; 25 yy=y+dir[1][i]; 26 if (false==judge(xx,yy)) 27 { 28 i=(i+1)%4;//换方向 29 continue; 30 } 31 x=xx; 32 y=yy; 33 ma[x][y]=1; 34 m--; 35 } 36 printf("%d %d ",x,y);//注意题目的坐标系其实和二维数组的系数一样 37 } 38 39 int main() 40 { 41 while (scanf("%d %d",&n,&m)!=EOF) 42 { 43 solve(1,1); 44 } 45 46 return 0; 47 }