• POJ 3009 Curling 2.0(棋盘DFS)


    Curling 2.0
     

    大意:

    就是要求把一个冰壶从起点“2”用最少的步数移动到终点“3”

    其中0为移动区域,1为石头区域,冰壶一旦想着某个方向运动就不会停止,也不会改变方向(想想冰壶在冰上滑动),除非冰壶撞到石头1 或者 到达终点 3

    冰壶撞到石头后,冰壶会停在石头前面,此时(静止状态)才允许改变冰壶的运动方向,而该块石头会破裂,石头所在的区域由1变为0. 也就是说,冰壶撞到石头后,并不会取代石头的位置。

    终点是一个摩擦力很大的区域,冰壶若到达终点3,就会停止在终点的位置不再移动。

    思路:

    DFS的水题    中间由于变量初始化放错位置了, WA了好几次。

     
      1 #include <Map>
      2 #include <stack>
      3 #include <queue>
      4 #include <math.h>
      5 #include <stdio.h>
      6 #include <string.h>
      7 #include <iostream>
      8 #include <limits.h>
      9 #include <algorithm>
     10 #define LL long long
     11 #define min(a,b) (a>b?b:a)
     12 #define max(a,b) (a>b?a:b)
     13 #define eps 1e-9
     14 #define INF 1 << 30
     15 using namespace std;
     16 
     17 int dx[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
     18 
     19 int Ans = 20;
     20 int n, m;
     21 int Map[30][30];
     22 int begin_x, begin_y;
     23 
     24 void Dfs(int x, int y, int depth)
     25 {
     26     int n_x, n_y;
     27     if(depth > 10)
     28         return ;
     29     for(int i = 0; i < 4; i++)
     30     {
     31         int flag = 0;
     32         if(Map[x+dx[i][0]][y+dx[i][1]] == 1)
     33             continue;
     34         n_x = x;
     35         n_y = y;
     36         while(1)
     37         {
     38             n_x += dx[i][0];
     39             n_y += dx[i][1];
     40             if(n_x >= 1 && n_x <= n && n_y >= 1 && n_y <= m)
     41             {
     42                 if(Map[n_x][n_y] == 3)
     43                 {
     44                     if(Ans > depth)
     45                     {
     46                         Ans = depth;
     47                     }
     48                     return ;
     49                 }
     50                 else if(Map[n_x][n_y] == 1)
     51                 {
     52                     break;
     53                 }
     54             }
     55             else
     56             {
     57                 flag = 1;
     58                 break;
     59             }
     60         }
     61         if(flag == 1)
     62             continue;
     63         Map[n_x][n_y] = 0;
     64         Dfs(n_x-dx[i][0], n_y-dx[i][1], depth+1);
     65         Map[n_x][n_y] = 1;
     66     }
     67 }
     68 
     69 void run()
     70 {
     71     while(~scanf("%d%d", &m, &n))
     72     {
     73         if(!m && !n)
     74             break;
     75         memset(Map, 0, sizeof(Map));
     76         for(int i = 1; i <= n; i++)
     77         {
     78             for(int j = 1; j <= m; j++)
     79             {
     80                 scanf("%d", &Map[i][j]);
     81                 if(Map[i][j] == 2)
     82                 {
     83                     begin_x = i;
     84                     begin_y = j;
     85                     Map[i][j] = 0;
     86                 }
     87             }
     88         }
     89         Ans = 500;
     90         Dfs(begin_x, begin_y, 1);
     91         if(Ans == 500)
     92             printf("-1
    ");
     93         else
     94             printf("%d
    ", Ans);
     95     }
     96 }
     97 
     98 int main(void)
     99 {
    100     run();
    101 
    102     return 0;
    103 }
    Curling 2.0
  • 相关阅读:
    System.ServiceModel.CommunicationException: 接收HTTP 响应时错误发生
    "智囊"王沪宁先后辅佐三任总书记 _中国经济网
    xx
    我告诉你哦,最好吃的海南鸡饭不在海南…
    服务密码重置_中国移动通信
    移动服务密码怎么查_服务密码忘记了怎么办_百度经验
    http://www.sohu.com/a/162795109_465329
    首页--易配菜-中国餐饮行业最大的综合解决方案提供商
    浙江方圆工程咨询有限公司
    MySQL中间件方案盘点_搜狐科技_搜狐网
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3468045.html
Copyright © 2020-2023  润新知