HUD 1026 纯C代码广搜
2015-11-02 16:36
447 查看
网上找的大多是用C++,不会C++也不知道<queque>头文件的话,有些解题报告看不懂。
#include<stdio.h> int m,n,t = 0,ft[105][105],dp[105][105],q[101*101*20][2]; char a[105][105]; int dir[4][2]= {{0,-1},{0,1},{1,0},{-1,0}}; void bfs() { int x,y,xx,yy,parent,front = 0,rear = 1,tt,i; q[0][0] = q[0][1] = 0; dp[0][0] = 0; while(front != rear) { x = q[front][0]; y = q[front][1]; parent = front; front++; for(i = 0; i < 4; i++) { xx = x + dir[i][0]; yy = y + dir[i][1]; if(xx < 0 || xx >= n || yy < 0 || yy >= m) continue; if(a[xx][yy] == 'X') continue; tt = dp[x][y] + 1; if(a[xx][yy] != '.') tt += a[xx][yy] - '0'; if(dp[xx][yy] != -1 && dp[xx][yy] <= tt) continue;//此处需注意,一旦 <= 变成 < 就会爆时间 dp[xx][yy] = tt; ft[xx][yy] = parent; q[rear][0] = xx; q[rear][1] = yy; rear++; } } } void show(int x,int y) { int i,_=ft[x][y]; if(ft[x][y] == -1) return; show(q[_][0],q[_][1]); t++; printf("%ds:(%d,%d)->(%d,%d)\n",t,q[_][0],q[_][1],x,y); if(a[x][y] != '.') { for(i = 0; i < a[x][y] - '0'; i++) { printf("%ds:FIGHT AT (%d,%d)\n",++t,x,y); } } } int main() { int i,j; while(~scanf("%d%d",&n,&m)) { t = 0; getchar(); memset(ft,-1,sizeof(ft)); memset(dp,-1,sizeof(dp)); for(i = 0; i < n; i++) { gets(a[i]); } bfs(); if(dp[n - 1][m - 1] == -1) printf("God please help our poor hero.\nFINISH\n"); else { printf("It takes %d seconds to reach the target position, let me show you the way.\n",dp[n - 1][m - 1]); show(n - 1, m - 1); printf("FINISH\n"); } } return 0; }
相关文章推荐
- 部署代码遇到坑
- struts2的StrutsPrepareAndExecuteFilter的作用
- 64位JAVA环境配置
- java parse 带英文单词的日期字符串(转化新浪微博api返回的时间)
- VC++ 6.0实用技巧汇总
- 欢迎使用CSDN-markdown编辑器
- PHP学习笔记
- Java基础之集合函数-Collection接口
- 黑马程序员———OC语言 类的声明和实现
- python django学习网站
- springMVC–参数绑定常用的注解
- 短信中VB.NET编码PDU(二)
- Web安全之C#语法学习
- 六、定制数据对象(Python的面向对象) ----- 打包代码与数据
- C语言8章函数
- Spring-各组件注释以及作用
- 《代码阅读方法与实践》读书笔记三
- 黑马程序员———C语言 结构体
- 浅谈C++类--隐式类类型转换
- 在word中显示漂亮的代码