CSUOJ 1302 - Walking on Chessboard 暴力BFS

来源:互联网 发布:cyc指标源码dzh 编辑:程序博客网 时间:2024/05/16 17:55

http://122.207.68.93/OnlineJudge/problem.php?id=1302


暴力BFS即可..保持步数从小到大的更新..开始不敢做..没注意数据的一些范围...


Program:

//http://122.207.68.93/OnlineJudge/problem.php?id=1302#include<iostream>#include<stdio.h>#include<cmath>#include<algorithm>#include<stack>#include<queue>#include<map>#include<set>#include<string.h>#define ll long long #define oo 1000007#define pi acos(-1.0)#define MAXN 500005using namespace std;   struct node{      int x,y,k;}h,p;int m,n,k,ex,ey,num[105][105][1005];bool used[105][105][1005];queue<node> myqueue; int main(){       while (~scanf("%d%d%d%d%d%d%d",&n,&m,&h.x,&h.y,&ex,&ey,&k))      {             while (!myqueue.empty()) myqueue.pop();             h.k=0;             myqueue.push(h);             memset(num,0,sizeof(num));             memset(used,false,sizeof(used));             used[h.y][h.x][0]=true;             num[h.y][h.x][0]=1;             while (!myqueue.empty())             {                   h=myqueue.front();                   myqueue.pop();                    if (h.k==k) continue;                   if (h.y+1<=m)                   {                         p.x=h.x,p.y=h.y+1,p.k=h.k+1;                         if (!used[p.y][p.x][p.k]) myqueue.push(p),used[p.y][p.x][p.k]=true;                         num[p.y][p.x][p.k]=(num[p.y][p.x][p.k]+num[h.y][h.x][h.k])%oo;                   }                   if (h.x-1>=1)                   {                         p.x=h.x-1,p.y=h.y,p.k=h.k+1;                         if (!used[p.y][p.x][p.k]) myqueue.push(p),used[p.y][p.x][p.k]=true;                         num[p.y][p.x][p.k]=(num[p.y][p.x][p.k]+num[h.y][h.x][h.k])%oo;                                                 }                   if (h.x+1<=n)                   {                         p.x=h.x+1,p.y=h.y,p.k=h.k+1;                         if (!used[p.y][p.x][p.k]) myqueue.push(p),used[p.y][p.x][p.k]=true;                         num[p.y][p.x][p.k]=(num[p.y][p.x][p.k]+num[h.y][h.x][h.k])%oo;                                               }                                }             printf("%d\n",num[ey][ex][k]);      }       return 0;}


原创粉丝点击