当前位置:编程学习 > C/C++ >>

hdu1242 Rescue

[cpp]
#include<iostream> 
#include<queue> 
using namespace std; 
 
char mp[201][201]; 
int m,n,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 
 
struct point 

    int x,y,step; 
    friend bool operator <(point t1,point t2) 
    { 
        return t1.step>t2.step; 
    } 
}; 
 
void bfs(point S) 

    int i; 
    point t,tt; 
    priority_queue<point>Q; 
    Q.push(S); 
    while(!Q.empty()) 
    { 
        t=Q.top(); 
        Q.pop(); 
        for(i=0;i<4;i++) 
        { 
            tt.x=t.x+dir[i][0];tt.y=t.y+dir[i][1];  tt.step=t.step+1; 
            if(tt.x<1||tt.x>m||tt.y<1||tt.y>n||mp[tt.x][tt.y]=='#') continue; 
            if(mp[tt.x][tt.y]=='r') {printf("%d\n",tt.step);return;} 
            if(mp[tt.x][tt.y]=='x') tt.step++; 
             
            mp[tt.x][tt.y]='#'; 
            Q.push(tt); 
        } 
    } 
    printf("Poor ANGEL has to stay in the prison all his life.\n"); 
    return; 

 
int main() 

    int i,j; 
    point S; 
     
    while(scanf("%d%d",&m,&n)!=EOF) 
    { 
        getchar(); 
        for(i=1;i<=m;i++) 
        { 
            for(j=1;j<=n;j++) 
            { 
                scanf("%c",&mp[i][j]); 
                if(mp[i][j]=='a') 
                { 
                    S.x=i; 
                    S.y=j; 
                    S.step=0; 
                } 
            } 
            getchar(); 
        } 
        bfs(S); 
    } 
    return 0; 

 


补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,