hdu 1428 漫步校园
来源:互联网 发布:免费健身软件 编辑:程序博客网 时间:2024/04/28 20:57
首先bfs求最短路
然后dfs求路径数量,使用记忆搜索优化。
数据较大,需采用__int64类型计数(G++中的long long)
#include<iostream>#include<queue>using namespace std;const int INF=0xfffffff;const int MAX=55;struct point{int x;int y;};int t[MAX][MAX];int m[MAX][MAX];bool inq[MAX][MAX];__int64 way[MAX][MAX];int gx[4]={1,0,-1,0};int gy[4]={0,1,0,-1};int n;void bfs();bool inside(int x,int y);__int64 dfs(int i,int j);int main(){ while(scanf("%d",&n)!=EOF){int i,j;for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&t[i][j]);bfs();memset(way,-1,sizeof(way));dfs(1,1); printf("%I64d\n",way[1][1]); }return 0;}void bfs(){queue<point> qq;memset(inq,0,sizeof(inq));point qn;qn.x=n;qn.y=n;qq.push(qn);inq[n][n]=1;int i,j;for(i=1;i<=n;i++)for(j=1;j<=n;j++)m[i][j]=INF;m[n][n]=t[n][n];while(!qq.empty()){point q=qq.front(); qq.pop();int l;inq[q.x][q.y]=0;for(l=0;l<4;l++){point p=q;p.x+=gx[l];p.y+=gy[l];if(inside(p.x,p.y)&&(t[p.x][p.y]+m[q.x][q.y]<m[p.x][p.y])){m[p.x][p.y]=t[p.x][p.y]+m[q.x][q.y];if(!inq[p.x][p.y]){inq[p.x][p.y]=1;qq.push(p);}}}}}bool inside(int x,int y){if(x<=n&&x>0&&y<=n&&y>0)return 1;return 0;}__int64 dfs(int i,int j){ int l;int& sum=m[i][j];__int64& w=way[i][j];if(i==n&&j==n) return 1;if(w!=-1) return w;w=0;for(l=0;l<4;l++){i+=gx[l];j+=gy[l];if(inside(i,j)&&(m[i][j]<sum))w+=dfs(i,j);i-=gx[l];j-=gy[l];}return w;}
- hdu 1428(漫步校园)
- hdu 1428 漫步校园
- HDU 1428 漫步校园
- hdu 1428 漫步校园
- HDU 1428 校园漫步
- HDU 1428 漫步校园
- hdu 1428 漫步校园
- HDU 1428 漫步校园
- HDU 1428 漫步校园(记忆化搜索)
- HDU 1428 漫步校园 (搜索 + dp)
- 【记忆化搜索】HDU 1428 漫步校园
- HDU 1428-漫步校园(记忆化搜索)
- hdu - 1428 - 漫步校园(bfs + dp)
- hdu 1428 漫步校园 记忆化搜索
- HDU 1428 漫步校园(BFS+DFS)
- hdu 2489 漫步校园
- HDU 1273 漫步校园 orz
- HDOJ 1428 漫步校园
- Spring MVC(二)
- 桶排序
- 关于swtchart 导出图片问题的解决
- 关于横竖屏切换问题几点知识(Android学习随笔一)
- No 50 · 二进制数据和Image互相转换
- hdu 1428 漫步校园
- junit applicationContext.xml
- MVP模式的相关知识
- C# 方法重载
- 让finder显示出Library文件夹
- PhoneGap API帮助文档翻译—Device(设备)
- GObject:用C实现类是如何做到的
- 设置组件状态--如何动态关闭manifest中的Receiver
- 修改DIALOG CBA