hdu1026题解
来源:互联网 发布:淘宝买洗衣机可靠吗 编辑:程序博客网 时间:2024/05/02 01:02
http://acm.hdu.edu.cn/showproblem.php?pid=1026
【题意】就是求从(0,0)到(n-1,m-1)所需要的时间,中间有不能走的陷阱和要PK的怪兽血量;
【题解】直接dfs肯定会超时,然后我又想到了自己曾经 “研发” 的倒水法(哈哈哈!)。但是那种“倒水法”只适用于最短路径的最快时间。所以我想到将怪兽的每一格血量,当作是一个单位时间流动(也许我讲的太复杂,其实并不难);另外输出要注意一下了。
#include<cstdio>#include<cstring>#define inf 2147483641struct qq{int x,y;}f[10001][2],fa[101][101];const int wayx[5]={0,-1,0,1,0}, wayy[5]={0,0,1,0,-1};int w[101][101],s[101][101],tot[101][101];int n,m;void write(int xx,int yy,int z){if((xx==1)&&(yy==1)){printf("%ds:(%d,%d)->",z+1,xx-1,yy-1);return ;}write(fa[xx][yy].x,fa[xx][yy].y,z-1-tot[xx][yy]);printf("(%d,%d)\n",xx-1,yy-1);int qre=0;for(int u=1;u<=tot[xx][yy];u++) printf("%ds:FIGHT AT (%d,%d)\n",(++qre)+(z-tot[xx][yy]),xx-1,yy-1);if(xx!=n||yy!=m)printf("%ds:(%d,%d)->",z+1,xx-1,yy-1);}int main(){while(scanf("%d%d",&n,&m)!=EOF){memset(w,0,sizeof(w));memset(tot,0,sizeof(tot));char ch;for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {while(ch=getchar(),ch=='\n'||ch==' ');if(ch=='X')s[i][j]=inf; else if(ch=='.')s[i][j]=0; else s[i][j]=(int)ch-48; }int t=0,l=1,time=0,key=0;f[1][t].x=f[1][t].y=1;w[1][1]=1;while(l>0){int b=0;for(int i=1;i<=l;i++)if(s[f[i][t].x][f[i][t].y]) {s[f[i][t].x][f[i][t].y]--;f[++b][t^1].x=f[i][t].x;f[b][t^1].y=f[i][t].y;tot[f[i][t].x][f[i][t].y]++;}else{int xx=f[i][t].x,yy=f[i][t].y;for(int j=1;j<=4;j++)if((xx+wayx[j]>0)&&(xx+wayx[j]<=n)) if((yy+wayy[j]>0)&&(yy+wayy[j]<=m)) if((s[xx+wayx[j]][yy+wayy[j]]!=inf)&&(!w[xx+wayx[j]][yy+wayy[j]])) { f[++b][t^1].x=xx+wayx[j]; f[b][t^1].y=yy+wayy[j]; w[xx+wayx[j]][yy+wayy[j]]=1; fa[xx+wayx[j]][yy+wayy[j]].x=xx; fa[xx+wayx[j]][yy+wayy[j]].y=yy; }} t^=1;l=b;time++; if((w[n][m])&&(!s[n][m])){key=1;break;}} if(key) { printf("It takes %d seconds to reach the target position, let me show you the way.\n",time); write(n,m,time); } else printf("God please help our poor hero.\n"); printf("FINISH\n"); }return 0;}
0 0
- hdu1026题解
- 题解HDU1026
- hdu1026
- hdu1026
- hdu1026
- HDU1026
- hdu1026
- hdu1026
- HDU1026
- HDU1026
- hdu1026
- HDU1026
- HDU1026
- hdu1026
- hdu1026 bfs
- hdu1026和hdu1242
- hdu1026还是搜索
- hdu1026 BFS+记录路径
- 【js设计模式笔记---单体模式】
- Java的访问级别:public(公共),protected(保护),private(私有)
- python&php数据抓取、爬虫分析与中介,有网址案例
- SPID和KPID的区别
- tyvj1114 等差数列
- hdu1026题解
- Linux下修改Mysql的用户(root)的密码
- PAT A 1036. Boys vs Girls (25)
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- NYOJ 题目38 布线问题
- 单元测试准则[译]
- ResourceBundle 操作properties文件和国际化
- OpenCV 2.4.9
- 良好的工作风格