您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: