zoukankan      html  css  js  c++  java
  • Poj 3626 BFS

     1 #include <math.h>
    2 #include <stdio.h>
    3 #include <stdlib.h>
    4 #include <string.h>
    5 #include <memory.h>
    6
    7 int mat[1010][1010];
    8 int i, nNum, tx, ty, ai, bi;
    9 int dx[] = {-1, 1, 0, 0};
    10 int dy[] = {0, 0, -1, 1};
    11
    12 struct path
    13 {
    14 int x, y, step;
    15 }q[1000010]={0};
    16
    17 int IsInBound(int x, int y)
    18 {
    19 if (x<0 || y<0|| x>1000 || y>1000)
    20 {
    21 return 0;
    22 }
    23
    24 return 1;
    25 }/* IsInBound */
    26
    27 void BFS()
    28 {
    29 int rear = -1;
    30 int k, front = -1;
    31 struct path cur, next;
    32
    33 cur.x = 500;
    34 cur.y = 500;
    35 cur.step = 0;
    36 q[++rear] = cur;
    37
    38 mat[500][500] = 1;
    39 while (front < rear)
    40 {
    41 cur = q[++front];
    42 if (cur.x==500-ty && cur.y==500+tx)
    43 {
    44 printf("%d\n", cur.step);
    45 break;
    46 }/* End of If */
    47
    48 for (k=0; k<4; ++k)
    49 {
    50 next.x = cur.x + dx[k];
    51 next.y = cur.y + dy[k];
    52 if (IsInBound(next.x, next.y) && mat[next.x][next.y]==0)
    53 {
    54 mat[next.x][next.y] = 1;
    55 next.step = cur.step + 1;
    56 q[++rear] = next;
    57 }
    58 }/* End of For */
    59 }/* End of WHile */
    60 }/* BFS */
    61
    62 int main()
    63 {
    64 while (3 == scanf("%d %d %d", &tx, &ty, &nNum))
    65 {
    66 memset(mat, 0, sizeof(mat));
    67 for (i=0; i<nNum; ++i)
    68 {
    69 scanf("%d %d", &ai, &bi);
    70 mat[500-bi][500+ai] = 1;
    71 }/* End of For */
    72
    73 BFS();
    74 }/* End of While */
    75
    76 return 0;
    77 }
  • 相关阅读:
    lintcode 中等题:interleaving String 交叉字符串
    lintcode 中等题:subsets II 带重复元素的子集
    lintcode 中等题:subSets 子集
    单机安装HBase
    编写运行R脚本
    R语言归一化处理
    HBase 常用Shell命令
    HBase基础知识
    Tomcat启动脚本
    Nginx配置文件详解
  • 原文地址:https://www.cnblogs.com/yewei/p/2373966.html
Copyright © 2011-2022 走看看