走格子(回行走法)

链接: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\n",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 }

 

posted @ 2018-06-18 12:28  hemeiwolong  阅读(581)  评论(0编辑  收藏  举报