hdoj 1428 漫步校园【bfs+dfs】
2016-04-04 16:37
453 查看
漫步校园
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3760 Accepted Submission(s): 1145
Problem Description
LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划分为n*n个小方格,代表各个区域。例如LL居住的18号宿舍位于校园的西北角,即方格(1,1)代表的地方,而机房所在的第三实验楼处于东南端的(n,n)。因有多条路线可以选择,LL希望每次的散步路线都不一样。另外,他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…)。现在他想知道的是,所有满足要求的路线一共有多少条。你能告诉他吗?
Input
每组测试数据的第一行为n(2=<n<=50),接下来的n行每行有n个数,代表经过每个区域所花的时间t(0<t<=50)(由于寝室与机房均在三楼,故起点与终点也得费时)。
Output
针对每组测试数据,输出总的路线数(小于2^63)。
Sample Input
3 1 2 3 1 2 3 1 2 3 3 1 1 1 1 1 1 1 1 1
Sample Output
1 6
Author
LL
Source
ACM暑期集训队练习赛(三)
Recommend
linle
Statistic | Submit | Discuss | Note
代码:
#include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #define LL long long using namespace std; LL mp[55][55]; LL dis[55][55]; LL dp[55][55]; bool vis[55][55]; struct node { LL x,y,step; bool friend operator < (node a,node b) { return a.step>b.step; } }a,temp; int dx[4]={0,1,-1,0}; int dy[4]={1,0,0,-1}; int n; int judge() { if(temp.x<1||temp.x>n) return 0; if(temp.y<1||temp.y>n) return 0; if(vis[temp.x][temp.y]) return 0; return 1; } void bfs()//求出各点到达终点需要花费的时间 { priority_queue<node>q; a.x=n,a.y=n,a.step=mp ; q.push(a);dis =mp ; memset(vis,0,sizeof(vis)); vis[a.x][a.y]=1; while(!q.empty()) { a=q.top(); q.pop(); for(int i=0;i<4;i++) { temp.x=a.x+dx[i]; temp.y=a.y+dy[i]; temp.step=a.step+mp[temp.x][temp.y]; if(judge()) { dis[temp.x][temp.y]=temp.step; vis[temp.x][temp.y]=1; q.push(temp); } } } } LL dfs(LL x,LL y) { if(dp[x][y]) return dp[x][y]; for(int i=0;i<4;i++) { LL xx=x+dx[i]; LL yy=y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&dis[x][y]>dis[xx][yy]) { dp[x][y]+=dfs(xx,yy); } } return dp[x][y]; } int main() { while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%lld",&mp[i][j]); } } bfs(); memset(dp,0,sizeof(dp)); dp =1; printf("%lld\n",dfs(1,1)); } return 0; }
相关文章推荐
- java中类与类、类与接口、接口与接口之间的关系
- Espresso自动化测试(十三)- UiAutomator2与Espresso的结合
- 重装系统数据恢复工具
- CALayer 异步绘制
- 面试题10 二进制中1的个数
- 软考信息系统监理师:2016年4月1日(冬青子)作业
- 一个简单的编译期注解
- 布局加载器LayoutInflater的三种获取方法
- DARPA称:“大数据”需要一个“大机理
- java微信开发API解析(二)-获取消息和回复消息
- TCP回射客户程序:main函数
- Java语言基础小结
- hdoj 1427 速算24点【经典dfs】
- 在js中模拟Java中的Map
- Hive分析窗口函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
- 商品内容页上传图片失败
- POJ 2828 Buy Tickets (线段树 or 树状数组+二分)
- JVM垃圾回收(GC 笔记)
- 位运算符
- win7 64 安装mysql-python