UVA 1600 Patrol Robot

Posted hh13579

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 1600 Patrol Robot相关的知识,希望对你有一定的参考价值。

题目链接

https://vjudge.net/problem/UVA-1600

典型的bfs模拟题,但我实在是菜。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define P pair<int,int>
int dx[5]=-1,0,0,1;
int dy[5]=0,-1,1,0;
int d[25][25];
int a[25][25];
int vis[25][25][25];
int n,m,k;
struct Point
    int x;int y;
;
struct Stat
    Point pos;
    int turbo;
;
int  bfs(int x1,int y1,int x2,int y2)

    Stat s;
    memset(d,0,sizeof(d));
    memset(vis,0,sizeof(vis));
    queue<Stat>que;
    s.pos.x=x1;
    s.pos.y=y1;
    if(a[x1][y1]==1)
    s.turbo=1;
    else
    s.turbo=0;
    if(s.turbo==1&&k==0)
    return -1;
    que.push(s);
    int ex,ey,size;
    while(que.size()>0)
    
        Stat s1;
        s1=que.front();
        ex=s1.pos.x;
        ey=s1.pos.y;
        size=s1.turbo;
        que.pop();
        if(ex==x2&&ey==y2)
        
            return d[ex][ey];
        
        for(int i=0;i<4;i++)
        
            int nx=ex+dx[i];
            int ny=ey+dy[i];
            Stat s2;
            s2.pos.x=nx;s2.pos.y=ny;
            if(size<=k)
                
                    if(a[nx][ny]==0)
                    
                        s2.turbo=0;
                    
                    else
                    
                        s2.turbo=size+1;
                    
                
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny][s2.turbo]==0)
            
                if(s2.turbo<=k)
                
                    que.push(s2);
                    vis[nx][ny][s2.turbo]=1;
                    d[nx][ny]=d[ex][ey]+1;        
                        
            
        
     
     return -1; 

int main()
 
    int T,ans;
    cin>>T;
    while(T--)
    
        cin>>n>>m>>k;
        for(int i=1;i<=n;i++)
        
            for(int j=1;j<=m;j++)
            
                cin>>a[i][j];
            
        
        ans=bfs(1,1,n,m);
        cout<<ans<<"\n";
    
    return 0;

 

以上是关于UVA 1600 Patrol Robot的主要内容,如果未能解决你的问题,请参考以下文章

UVa 1600 Patrol Robot (习题 6-5)

UVa1600 Patrol Robot(dfs)

Patrol Robot UVA - 1600

UVa1600 Patrol Robot (最短路)

UVa 1600 Patrol Robot(BFS)

Uva 1600 Patrol Robot (BFS 最短路/DFS剪枝)