Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125787
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-01 15:34
个人简介

不晓得说啥子

文章分类

全部博文(42)

文章存档

2015年(41)

2014年(1)

我的朋友

分类: C/C++

2015-04-04 10:26:25


点击(此处)折叠或打开

  1. //广搜 +深度记忆化搜索
  2. #include<iostream>
  3. #include<queue>
  4. using namespace std;
  5. #define MAX 1000000000
  6. int n,map[51][51],dis[51][51];
  7. __int64 dp[51][51];
  8. int dir[4][2]={1,0,0,1,-1,0,0,-1};
  9. struct node
  10. {
  11.  int x,y;
  12.  int time;
  13. };
  14. void bfs(int x1,int y1) //广搜每个点到终点的最短距离
  15. {
  16.     queue<node> s;
  17.  node a,b;
  18.  a.x=x1;
  19.  a.y=y1;
  20.  a.time=map[x1][y1];
  21.  s.push(a);
  22.  while(!s.empty())
  23.  {
  24.   b=s.front();
  25.   s.pop();
  26.   for(int i=0;i<4;i++)
  27.   {
  28.    a.x=b.x+dir[i][0];
  29.    a.y=b.y+dir[i][1];
  30.    if(a.x>0 && a.x<=n && a.y>0 && a.y<=n && (b.time+map[a.x][a.y])<dis[a.x][a.y])
  31.    {
  32.     a.time=b.time+map[a.x][a.y];
  33.                 dis[a.x][a.y]=a.time;
  34.     s.push(a);
  35.    }
  36.   }
  37.  }
  38. }
  39. __int64 dfs(int x,int y) //记忆化搜索最多的路径 如果一个点先前搜到过就可以不用搜了
  40. {
  41.    if(dp[x][y]!=-1) return dp[x][y];
  42.    __int64 ans=0;
  43.    int x1,y1;
  44.    for(int k=0;k<4;k++)
  45.    {
  46.     x1=x+dir[k][0];
  47.     y1=y+dir[k][1];
  48.     if(x1>0 && x1<=n && y1>0 && y1<=n && dis[x1][y1]<dis[x][y])
  49.     {
  50.      ans+=dfs(x1,y1);
  51.     }
  52.    }
  53.    return dp[x][y]=ans;
  54.   
  55. }
  56. int main()
  57. {
  58.  int i,j;
  59. // freopen("E:\\test.txt","r",stdin);
  60.  while(cin>>n)
  61.  {
  62.   for(i=1;i<=n;i++)
  63.   {
  64.    for(j=1;j<=n;j++)
  65.    {
  66.     cin>>map[i][j];
  67.     dis[i][j]=MAX;
  68.    }
  69.   }
  70.   dis[n][n]=map[n][n];
  71.   bfs(n,n);
  72.   memset(dp,-1,sizeof(dp));
  73.   dp[n][n]=1;
  74.   dfs(1,1);
  75.      printf("%I64d\n",dp[1][1]);
  76.  }
  77.  return 0;
  78. }

阅读(1052) | 评论(0) | 转发(0) |
0

上一篇:hdu 1513 dp +优化

下一篇:hdu 2102 广度搜索

给主人留下些什么吧!~~