• 动态规划学习记录 一、最短通路问题


    一、最短通路问题

    模型分析:不同的城市之间相互有通路:我们要从1城市出发,最终到达n城市,最所走的最短路径,并输出任意最短路径

    数据结构:邻接矩阵(n*n)

    算法分析:

    1、最优子结构:s[i]:存储从最底层到达i点的最短路径。

    2、递推公式:自下而上:si=max{s(j)+m(i,j)}(j:i邻接的点)

    3、边界条件:s[1]=0;//从1点出发,到达1点,路径为0。

    4、数据存储:

    Const
      M : array[1..7, 1..7] of integer = ( //注意:这是单向联通的图
                                    (0, 5 ,2 ,0 ,0 ,0, 0),
        			        (0, 0, 0, 3, 2, 0, 0),
    				(0, 0, 0, 0, 7, 4, 0),
    				(0, 0, 0, 0, 0, 0, 4),
    				(0 ,0, 0, 0, 0, 0, 3),
    				(0, 0, 0, 0, 0, 0, 5),
    				(0, 0, 0, 0, 0, 0, 0));
    Var
      S : array[1..7] of integer;
    //用来存储各个结点的最短通路的数组
    

     5、代码实现:

    #include<iostream>
    #include<limits.h>
    #include<stting.h>
    #define maxn 1000
    using namespace std;
    int map[maxn][maxn];
    int d[maxn];
    int path[maxn];
    int main(){
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++){//读入图的邻接矩阵
    		for(int j=1;j<=n;j++){
    			cin>>map[i][j];
    		}
    	}
    	//其实,如果更直观的表示,那么,d【n】=0.
    	//for(int i=n-1;i>=1;i--)//递推构造{
    	//	d[i]=INT_MAX;//最小值容易覆盖
    	//	for(int j=n;j>=i+1;j--){
    	//		if (map[i][j]>0)//表示从i到有通路
    	//		d[i]=max(d[i],map[i][j]+d[j]);//自下而上的递推
    	//	}
    	//}
    	//方法二://自我认为,更容易理解哦,同时能够输出路径
    	mems=et(d,0x3f3f3f3f,sizeof(d));
    	d[n]=0;
    	for(int i=n;i>=1;i--){
    		path[i]=0;//这样path[n]==0 
    		for(int j=n;j>=n+1;j--){
    			if(map[i][j]>0){
    			d[i]=max(d[i],map[i][j]+d[j]);
    			}
    		}
    	}
    	int p=1;//从一号节点开始
    	while(path[p]!=0){//打印路径
    		cout<<p<<"->";
    		p=path[p];
    	}
    	cout<<d[1]<<endl;//注意是自底而上,输出最短路径长度
    	
    }
    

     

     

     

  • 相关阅读:
    上海某地产监控项目
    2020,8种必备Selenium编写自动化用例的技巧
    使用 Postman 做 API 自动化测试
    Python最火的第三方开源测试框架 ——pytest
    基于Appium的UI自动化测试
    4招了解前端单元测试
    你应该学会的接口调试神器——Postman高级用法
    分分钟玩转UI自动化测试
    Python Selenium 之数据驱动测试的实现
    python+requests接口自动化框架
  • 原文地址:https://www.cnblogs.com/little-w/p/3224574.html
Copyright © 2020-2023  润新知