zoukankan      html  css  js  c++  java
  • POJ 3009 Curling 2.0 dfs

    题目: http://poj.org/problem?id=3009

    很简单的一个题,调试了好久。。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int n, m, maze[30][30], ans;
     5 int start_x, start_y, end_x, end_y;
     6 int dirc[4][2] = {{0,1}, {1,0}, {0,-1}, {-1,0}};
     7 
     8 void dfs(int x, int y, int step, int dir)
     9 {
    10     if(step > 10 || maze[x][y] == -1)return;
    11     if(x == end_x && y == end_y)
    12     {
    13         if(ans == -1 || step < ans)
    14             ans = step;
    15         return;
    16     }
    17     int nx = x + dirc[dir][0];
    18     int ny = y + dirc[dir][1];
    19     if(maze[nx][ny] != 1)
    20     {
    21         dfs(nx, ny, step, dir);
    22         return;
    23     }
    24     else if(maze[nx][ny] == 1)
    25     {
    26         maze[nx][ny] = 0;
    27         for(int d = 0; d < 4; d++)
    28         {
    29             int xx = x + dirc[d][0];
    30             int yy = y + dirc[d][1];
    31             if(maze[xx][yy] != 1)
    32                 dfs(xx, yy, step+1, d);
    33         }
    34         maze[nx][ny] = 1;
    35     }
    36 }
    37 
    38 int main()
    39 {
    40     while(scanf("%d %d", &m, &n) != EOF)
    41     {
    42         if(n == 0 && m == 0)break;
    43         memset(maze, -1, sizeof(maze));
    44         for(int i = 1; i <= n; i++)
    45         {
    46             for(int j = 1; j <= m; j++)
    47             {
    48                 scanf("%d", &maze[i][j]);
    49                 if(maze[i][j] == 2)
    50                 {
    51                     start_x = i;
    52                     start_y = j;
    53                 }
    54                 if(maze[i][j] == 3)
    55                 {
    56                     end_x = i;
    57                     end_y = j;
    58                 }
    59             }
    60         }
    61         ans = -1;
    62         for(int d = 0; d < 4; d++)
    63         {
    64             int nx = start_x + dirc[d][0];
    65             int ny = start_y + dirc[d][1];
    66             if(maze[nx][ny] != 1)
    67                 dfs(nx, ny, 1, d);
    68         }
    69         printf("%d
    ", ans);
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    Python 操作 Azure Blob Storage
    @private、@protected与@public三者之间的区别
    iOS设计模式
    NSMapTable、NSHashTable与NSPointerArray的封装
    iOS设计模式
    用UITextView加载rtfd文件
    UIWebView如何加载本地图片
    [翻译] BezierString
    [翻译] AYVibrantButton
    用NSOperation写下载队列
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3267283.html
Copyright © 2011-2022 走看看