hdu 1242 Rescue

来源:互联网 发布:python win32api手册 编辑:程序博客网 时间:2024/05/08 10:31

最近想做做搜索,bfs、dfs、图一直都不敢去碰。。找了题比较直接的题目来做、、、、

只是要注意friend只有一个。。。。其他没什么易错了好像

#include<stdio.h>#include<string.h>#define MAX 205struct line{int x,y,t;}query[MAX*MAX],direct[4];int map[MAX][MAX],ans;int get(char x){switch(x){case '.':return 0;case 'a':return -2;case 'r':return -1;case '#':return -3;default:return -4;}}void set(int i,int j,int num){query[ans].x=i;query[ans].y=j;query[ans++].t=num;}void print(int n,int m){int i,j;printf("@@@@@@@@\n");for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%d ",map[i][j]);printf("\n");}printf("@@@@@@@\n");}void print1(){int i;printf("########\n");for(i=0;i<ans;i++)printf("%d %d %d\n",query[i].x,query[i].y,query[i].t);printf("########\n");}void initdirect(){direct[0].x=0,direct[0].y=1,direct[0].t=0;direct[1].x=1,direct[1].y=0,direct[1].t=0;direct[2].x=0,direct[2].y=-1,direct[2].t=0;direct[3].x=-1,direct[3].y=0,direct[3].t=0;}int bfs(int n,int m){int i,j;struct line a;initdirect();for(i=0;i<ans;i++){for(j=0;j<4;j++){a.x=query[i].x+direct[j].x;a.y=query[i].y+direct[j].y;a.t=query[i].t;if(a.x>=0&&a.x<n&&a.y>=0&&a.y<m){//printf("%d %d %d\n",a.x,a.y,a.t);if(map[a.x][a.y]==-2)return a.t+1;if(map[a.x][a.y]==-4){set(a.x,a.y,a.t+2);map[a.x][a.y]=1;}if(!map[a.x][a.y]){set(a.x,a.y,a.t+1);map[a.x][a.y]=1;}}}}return -1;}int main(){int n,m,i,j,flag;char a;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++){getchar();for(j=0;j<m;j++){scanf("%c",&a);map[i][j]=get(a);if(map[i][j]==-1){ans=0;set(i,j,0);}}}//print(n,m);//print1();flag=bfs(n,m);if(flag==-1)printf("Poor ANGEL has to stay in the prison all his life.\n");elseprintf("%d\n",flag);}return 0;}


 

原创粉丝点击