动态规划最短路径

fjfj340 2011-12-17 08:53:26
老师很认真讲了半小时动态规划原理,然后出了一道题,大意是从A到Z求最短路径,其中A到Z之间有很多点,每点距离不同,然后是自己写代码。但我只会记录每点之间的距离,怎样去比较想了很久也想不出!有谁能给个相似问题的代码我参悟参悟吗?我真的不想拿自己的智商去打击老师,但文化课的作用已经拖了很多很多了,而且就快期末考了,不能再退步了........拜托了........
...全文
811 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjjwind 2011-12-18
  • 打赏
  • 举报
回复

queue<point> q;
while(!q.enpty())
{
int u = q.front();
q.pop();
for(int v = 0 ; v < n ; v ++ )
{
if(map[u][v] && !vis[u][v])
{
vis[u][v] = true;//标记为走过
dis[v] <?= dis[u] + map[u][v];//松弛,dis[v]表示从起点到v点的最短路径
q.push_back(v);//直接在这儿敲的代码,进队列
敲掉了。。。 }
}
}
sjjwind 2011-12-18
  • 打赏
  • 举报
回复

for(int k = 0 ; k < n ; k ++ )
{
for(int i = 0 ; i < n ; i ++ )
{
for(int j = 0 ; j < n ; j ++ )
{
dis[i][j] <?= map[i][k] + map[k][j];//松弛,div[iu][j]表示i到j的最短路径
}
}
}

这个flyod算法

queue<point> q;
while(!q.enpty())
{
int u = q.front();
q.pop();
for(int v = 0 ; v < n ; v ++ )
{
if(map[u][v] && !vis[u][v])
{
vis[u][v] = true;//标记为走过
dis[v] <?= dis[u] + map[u][v];//松弛,dis[v]表示从起点到v点的最短路径
}
}
}

这个是spfa算法,是bellman-ford算法的改进,dijkstra算法可以自己去查查,这个是贪心的思想
fjfj340 2011-12-18
  • 打赏
  • 举报
回复
什么是松弛技术?什么是背包九讲啊?我不要思路,给我代码我看得明的
sjjwind 2011-12-18
  • 打赏
  • 举报
回复
动态规划?你说的是松弛技术么?
hello_world_ww 2011-12-18
  • 打赏
  • 举报
回复
对搜索树加状态变量 避免重复搜索
hello_world_ww 2011-12-18
  • 打赏
  • 举报
回复
最短路径。。。。。。“图论”这块值得好好研究
sjjwind 2011-12-18
  • 打赏
  • 举报
回复
不能没有挑最大的走,你求的是最短路,应该用松弛,即如果a到b有n条路,通过枚举把两者间的最短路找出来,可以参考《算法导论》,里面有核心伪代码。
fjfj340 2011-12-18
  • 打赏
  • 举报
回复
我这道题有些路是不通的
如1可以到2,3,4,5但下一层2可以到7,8 3到7,8........
你那数塔在上一层的总可以到下一层的啊,只要每层挑最大的走不就行了?
zwb8848happy 2011-12-17
  • 打赏
  • 举报
回复
有个相似的问题你可以看看:数塔问题 。经典的动态规划问题

http://blog.csdn.net/ZhengZhiRen/article/details/4129081

其实动态规划就是找动态转移方程。
有兴趣可以看看背包九讲
fjfj340 2011-12-17
  • 打赏
  • 举报
回复
好心高手赐教可以加我这个Q:1423148345 来者不拒,感激不尽

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧