zoukankan      html  css  js  c++  java
  • 九度 1335

    http://ac.jobdu.com/problem.php?id=1335

    开始时傻傻的用DFS,不断超时,不断剪枝,仍不断超时,最后用BFS,先是保存路径,最后求路径长,仍超时,无意中翻到算法导论,也是,题目中没让打印路径,直接记录长度即可,于是把代码一改,结果10个数据过5个,这时我不再怀疑算法的问题了,检查了一遍,发现queue<int> Q开成了全局变量,这样一来,如果上次在队列没空之前找到了出口,队列中会遗留结点,导致下一次的数据出错,改过来,AC,看了下榜,用的内存还算少的~

    indent不太会用,把代码格式化的有些乱,毕竟是从机房那边VC弄过后邮件发过来的,空格什么的都乱了

     1 #include <stdio.h>
    2 #include <stdlib.h>
    3 #include <string.h>
    4 #include <queue>
    5 using namespace std;
    6 bool mat[102][102];
    7 int visited[102][102] = { 0 };
    8
    9 queue < int >Q;
    10
    11 int x_pos[] = { 0, 0, -1, 1 };
    12 int y_pos[] = { -1, 1, 0, 0 };
    13
    14 int n;
    15
    16 void
    17 bfs ()
    18 {
    19 int x, y, i;
    20 while (!Q.empty ())
    21 {
    22
    23 x = Q.front ();
    24 Q.pop ();
    25 y = Q.front ();
    26 Q.pop ();
    27
    28 if (x == n && y == n)
    29 { //find it
    30 break;
    31 }
    32 //visited[x][y]++;
    33 for (i = 0; i < 4; i++)
    34 {
    35 if (!visited[x + x_pos[i]][y + y_pos[i]]
    36 && !mat[x + x_pos[i]][y + y_pos[i]])
    37 {
    38 Q.push (x + x_pos[i]);
    39 Q.push (y + y_pos[i]);
    40 visited[x + x_pos[i]][y + y_pos[i]] = visited[x][y] + 1;
    41
    42 }
    43 }
    44 }
    45 }
    46
    47
    48 int
    49 main ()
    50 {
    51 while (scanf ("%d", &n) != EOF)
    52 {
    53 int i, j;
    54 while (!Q.empty ())
    55 Q.pop ();
    56
    57 memset (mat, true, sizeof (mat));
    58 memset (visited, false, sizeof (visited)); //init
    59
    60 for (i = 0; i <= n + 2; i++)
    61 for (j = 1; j <= n + 2; j++)
    62 mat[i][j] = true;
    63 for (i = 1; i <= n; i++)
    64 for (j = 1; j <= n; j++)
    65 {
    66 int temp;
    67 scanf ("%d", &temp);
    68 if (temp == 1)
    69 mat[i][j] = true;
    70 else
    71 mat[i][j] = false;
    72 }
    73 if (mat[1][1] || mat[n][n])
    74 {
    75 printf ("-1\n");
    76 continue;
    77 }
    78 if (n == 1 && !mat[1][1])
    79 {
    80 printf ("0\n");
    81 continue;
    82 }
    83 Q.push (1);
    84 Q.push (1);
    85 bfs ();
    86
    87 if (!visited[n][n])
    88 {
    89 printf ("-1\n");
    90 continue;
    91 }
    92
    93 printf ("%d\n", visited[n][n]);
    94 }
    95 }
  • 相关阅读:
    交换机模拟器
    bootstrap-分页-默认分页
    bootstrap-分页-默认分页
    bootstrap-分页-默认分页
    交易系统查询带上for update
    集成开发环境(IDE) Mix介绍
    Dapp及相关开发工具介绍
    区块链技术视频网站EthCast.com上线
    区块链:最小可行区块链原理解析1
    账户、交易核心概念及投注合约解析
  • 原文地址:https://www.cnblogs.com/yangce/p/2260004.html
Copyright © 2011-2022 走看看