zoukankan      html  css  js  c++  java
  • COJ1224(ACM小组的古怪象棋)

    题目链接

    题目大意:棋盘上有一个马和一个帅,现给定棋盘的大小及马和帅的位置,假定帅不能移动,求马最少在多少步之内能吃到帅。

    这题我WA了4次,第一个错误是没有考虑到帅可能会阻挡马的路线,第二个错误是初始化t[N][N]时不小心将两个循环中都写成了n,而棋盘的大小是n*m。

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MIN(a,b) ((a)<(b)?(a):(b))
     4 #define INF 0x7fffff
     5 #define N 20
     6 #define M 401
     7 struct node
     8 {
     9     int x,y;
    10 }queue[M];
    11 int front,rear;
    12 int t[N][N];
    13 int dx[8]={1,-1,-2,-2,-1,1,2,2};
    14 int dy[8]={2,2,1,-1,-2,-2,-1,1};
    15 int vis[N][N];
    16 int n,m,si,sj,ei,ej;
    17 void bfs(int x,int y)
    18 {
    19     int i,j,ni,nj,d;
    20     front=rear=0;
    21     for(i=0;i<n;i++)
    22         for(j=0;j<m;j++)    t[i][j]=INF;
    23     t[x][y]=0;
    24     memset(vis,0,sizeof(vis));
    25     vis[x][y]=1;
    26     queue[rear].x=x,queue[rear++].y=y;
    27     while(front!=rear)
    28     {
    29         i=queue[front].x,j=queue[front].y;
    30         front=(front+1)%M;
    31         for(d=0;d<8;d++)
    32         {
    33             ni=i+dx[d],nj=j+dy[d];
    34             if(ni<0 || nj<0 || ni>=n || nj>=m || vis[ni][nj])  continue;
    35             if(dx[d]==2&&ej==j&&ei==(i+1))  continue;
    36             if(dx[d]==-2&&ej==j&&ei==(i-1)) continue;
    37             if(dy[d]==2&&ei==i&&ej==(j+1))  continue;
    38             if(dy[d]==-2&&ei==i&&j==(j-1))  continue;
    39             t[ni][nj]=MIN(t[ni][nj],t[i][j]+1);
    40             if(ni==ei&&nj==ej)  return;
    41             vis[ni][nj]=1;
    42             queue[rear].x=ni,queue[rear].y=nj;
    43             rear=(rear+1)%M;
    44         }
    45     }
    46 }
    47 int main()
    48 {
    49     while(~scanf("%d%d%d%d%d%d",&n,&m,&ei,&ej,&si,&sj))
    50     {
    51         si--,sj--,ei--,ej--;
    52         bfs(si,sj);
    53         if(t[ei][ej]==INF)  printf("-1\n");
    54         else    printf("%d\n",t[ei][ej]);
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    Node.js安装及环境配置之Windows篇
    C++ STL中Map的按Key排序和按Value排序
    设计模式之观察者模式(c++)
    C/C++回调函数
    c++ string详解 assign
    C++ unsigned long 转化为 unsigned char*
    unsigned char 与unsigned long互换
    微信小程序的登陆流程详解
    谷歌帮:中国最牛的创业帮派
    创业公司打造顶级团队的七个方法
  • 原文地址:https://www.cnblogs.com/algorithms/p/2445738.html
Copyright © 2011-2022 走看看