hdu 2489 漫步校园
2015-08-26 17:19
274 查看
那个sb翻译的题目,真是醉了,dfs+bfs
#include<iostream> #include<cstring> #include<queue> #define ll long long #define maxn 55 using namespace std; int n; int mapp[maxn][maxn]; ll dp[maxn][maxn]; int vaule[maxn][maxn]; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; struct stu { int x,y; }; void bfs() { memset(vaule,0,sizeof(vaule)); queue<stu>q; stu x,y; x.x=n-1;x.y=n-1; vaule[n-1][n-1]=mapp[n-1][n-1]; q.push(x); while(q.size()) { x=q.front(); q.pop(); for(int i=0;i<4;i++) { y.x=x.x+dir[i][0]; y.y=x.y+dir[i][1]; if(y.x>=0&&y.x<n&&y.y>=0&&y.y<n&& (!vaule[y.x][y.y]||vaule[y.x][y.y]>vaule[x.x][x.y]+mapp[y.x][y.y])) { vaule[y.x][y.y]=vaule[x.x][x.y]+mapp[y.x][y.y]; q.push(y); } } } } ll dfs(int x,int y) { if(dp[x][y]) return dp[x][y]; for(int i=0;i<4;i++) { int xx=x+dir[i][0],yy=y+dir[i][1]; if(xx>=0&&xx<n&&yy>=0&&yy<n&&vaule[xx][yy]<vaule[x][y]) { dp[x][y]+=dfs(xx,yy); } } return dp[x][y]; } int main() { while(cin>>n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cin>>mapp[i][j]; } bfs(); memset(dp,0,sizeof(dp)); dp[n-1][n-1]=1; cout<<dfs(0,0)<<endl; } return 0; }
相关文章推荐
- [MySQL] 主流存储引擎介绍
- C++与Java虚函数的区别
- 伪静态规则写法RewriteRule-htaccess详细语法使用
- linux 显示文本隐藏字符的方法
- 什么是L2 frame?
- 坚定的基本面分析逻辑
- jQuery学习笔记之二——常规选择器
- 安卓5.0新特性之Palette
- iOS开发——网络篇——数据安全(MD5),HTTPS,检测网络状态
- epoll测试实例
- android去掉顶部标题栏
- 我是菜鸟:java并发编程
- C# XML文件操作
- TextWatcher限制字数,避免栈溢出
- UI - UIGestureRecognizer 手势
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- arcgis for javasscript划线
- Android framework系统默认设置修改
- Java中整数(秒数)转换为时分秒格式(xx:xx:xx)
- hdu1249三角形(递推)