程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> hdu 1072 Nightmare (bfs)

hdu 1072 Nightmare (bfs)

編輯:C#入門知識

在n×m的地圖上,0表示牆,1表示空地,2表示人3表示目的地,4表示有炸彈重啟器。炸彈的時間是6,人走一步所需要的時間是1求人從2走到3的最短時間
[csharp]
#include"stdio.h" 
#include"string.h" 
#include"queue" 
using namespace std; 
struct node 

    int x,y,step,count; 
}p,q; 
int d[4][2]={1,0,0,1,-1,0,0,-1}; 
int map[10][10],sx,sy,n,m; 
int judge(int x,int y) 

    if(x>=1&&x<=n&&y>=1&&y<=m&&map[x][y]!=0) 
        return 1; 
    return 0; 

void bfs() 

    queue<node>Q; 
    int i; 
    p.x=sx; 
    p.y=sy; 
    p.step=0; 
    p.count=6; 
    Q.push(p); 
    map[sx][sy]=0; 
    while(!Q.empty()) 
    { 
        p=Q.front(); 
        Q.pop(); 
        for(i=0;i<4;i++) 
        { 
            q=p; 
            q.x+=d[i][0]; 
            q.y+=d[i][1]; 
            if(judge(q.x,q.y)) 
            { 
                if(map[q.x][q.y]==1) 
                { 
                    q.count--; 
                    if(q.count>=1) 
                    { 
                        q.step++; 
                        Q.push(q); 
                    } 
                } 
                if(map[q.x][q.y]==4) 
                { 
                    q.count--; 
                    if(q.count>=1) 
                    { 
                        q.step++; 
                        q.count=6; 
                        Q.push(q); 
                    } 
                    map[q.x][q.y]=0; 
                } 
                if(map[q.x][q.y]==3&&q.count>1) 
                { 
                    q.step++; 
                    printf("%d\n",q.step); 
                    return ; 
                } 
            } 
        } 
    } 
    printf("-1\n"); 

int main() 

    int T,i,j; 
    scanf("%d",&T); 
    while(T--) 
    { 
        scanf("%d%d",&n,&m); 
        for(i=1;i<=n;i++) 
        { 
            for(j=1;j<=m;j++) 
            { 
                scanf("%d",&map[i][j]); 
                if(map[i][j]==2) 
                { 
                    sx=i;sy=j; 
                } 
            } 
        } 
        bfs(); 
    } 
    return 0; 


作者:yyf573462811

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved