• POJ3009 Curling 2.0


    正式做POJ的第一题,做出来后又看了别人的代码,就又完善了一下,也通过了。参考 http://blog.sina.com.cn/s/blog_4abcd9bc0100phzb.html

    改了之后觉得写得比他好,呵呵。

     1 #include <iostream>
     2 #include <stdlib.h>
     3 
     4 using namespace std;
     5 
     6 #define MAX_W 20
     7 #define MAX_H 20
     8 
     9 int s_x;
    10 int s_y;
    11 int w;
    12 int h;
    13 char board[MAX_H+2][MAX_W+2];    //留边,省得越界检查
    14 int res;
    15 
    16 int dx[]={0,0,1,-1};
    17 int dy[]={1,-1,0,0};
    18 
    19 void read(void);
    20 void dfs(int x,int y,int time);
    21 
    22 
    23 int main(void)
    24 {
    25     while(scanf("%d%d",&w,&h),w)
    26     {
    27         res=20;
    28         getchar();    //残留的换行符
    29         read();
    30         dfs(s_x,s_y,0);
    31         printf("%d
    ",res==20?-1:res);
    32     }
    33     return 0;
    34 }
    35 
    36 void read(void)
    37 {
    38     int i,j;
    39     for(i=0;i<=h+1;i++)
    40     {
    41         for(j=0;j<=w+1;j++)
    42         {
    43             if(i==0 || j==0 || i==h+1 || j==w+1)
    44             {
    45                 board[i][j]=0; //清边,防止影响下一轮判断
    46                 continue;
    47             }
    48 
    49             board[i][j]=getchar();
    50             getchar();
    51             if(board[i][j]=='2')
    52             {
    53                 s_x=i;
    54                 s_y=j;
    55             }
    56         }
    57     }
    58 }
    59 
    60 
    61 //从该点寻找终点
    62 //time是已经扔石头的次数
    63 void dfs(int x,int y,int time)
    64 {
    65     int i;
    66 
    67     if(time>=10) return;
    68 
    69     for(i=0;i<4;i++)
    70     {
    71         int nx=x;
    72         int ny=y;
    73         if(board[x+dx[i]][y+dy[i]]=='1')    //方块阻挡则换方向
    74             continue;
    75 
    76         while(1)    //在该方向滑行
    77         {
    78             nx+=dx[i],ny+=dy[i];
    79             if(nx<=0 || ny<=0 ||nx>h || ny>w)    //滑出,换下一方向
    80                 break;
    81             else if(board[nx][ny]=='1')
    82             {
    83                 //停下,消失方块,完成该方向,恢复方块,进行下一方向
    84                 board[nx][ny]='0';
    85                 dfs(nx-dx[i],ny-dy[i],time+1);
    86                 board[nx][ny]='1';
    87                 break;
    88             }
    89             else if(board[nx][ny]=='3')    //成功,不用尝试其他方向
    90             {                            //因为其它方向一定步骤更多
    91                 res=__min(res,time+1);
    92                 return;
    93             }
    94 
    95         }
    96     }
    97 }
    Curling.cpp
  • 相关阅读:
    团队绩效评估计划
    Beta阶段项目总结
    Alpha阶段项目总结
    Alpha版总结会议
    快上车项目简介(500字)
    第二阶段团队冲刺站立会议10
    第二阶段团队冲刺站立会议09
    第二阶段团队冲刺站立会议08
    第二阶段团队冲刺站立会议07
    第二阶段团队冲刺站立会议06
  • 原文地址:https://www.cnblogs.com/zackcoder/p/3248322.html
Copyright © 2020-2023  润新知