C++ 动态规划算法 多源点最短路径问题&&导弹拦截问题

1)多源点最短路径问题

问题描述:给定带权有向图G=(V,E),对任意顶点vi和vj,求顶点vi到vj的最短路径长度。 

输入(邻接矩阵,-1表示无穷大,即无边):

0 4 11

6 0 2

3 -1 0

输出(所有点对之间的最短路径):

0 4 6

5 0 2

3 7 0

2)导弹拦截问题

问题描述:某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它能拦截任意高度的导弹,但是每拦截一发导弹,其拦截能力就下降到只能拦截上一次拦截的导弹高度。某天,雷达捕捉到敌国的导弹来袭,导弹依次飞来,该拦截系统最多能拦截多少导弹呢?并输出各拦截的导弹高度。

输入:

8//导弹个数

3890  2070  1550  3000  2990  1700  1580  650//各导弹飞行高度

输出:

6//最多能拦截的导弹个数

3890  3000 2990  1700  1580  650//各拦截的导弹高度

1.
#include
#include
using namespace std;


int main(){
    int n=3;
    int arc[n][n];
    int dist[n][n];
    for(int i=0;i>arc[i][j];   //初始化代价矩阵arc[n][n] 存储有向边的权值
        }
    }
    for(int i=0;i
#include
#include
using namespace std;

void missile_intercept(int daodan[],int lanjie_num[],int n){
        for(int i=n-2;i>=0;i--){ //从后往前遍历
        for(int j=i+1;j=daodan[j] && lanjie_num[i]nummax){
            nummax = lanjie_num[i];
            thefirst = i;
        }
    }
    cout<>n;
    int daodan[n];
    for(int i=0;i>daodan[i];
    }

    int lanjie_num[n];
    memset(lanjie_num,0,sizeof(lanjie_num)); //初始化每个导弹处的拦截数目为0
    lanjie_num[n-1] = 1; //最后一个导弹处拦截数目为1

    missile_intercept(daodan,lanjie_num,n);
   /* for(int i=n-2;i>=0;i--){ //从后往前遍历
        for(int j=i+1;j=daodan[j] && lanjie_num[i]nummax){
            nummax = lanjie_num[i];
            thefirst = i;
        }
    }
    cout<

动态规划算法 分析问题的时候从后往前 从右往左  输出解的时候从前往后 从左往右

你可能感兴趣的:(C++ 动态规划算法 多源点最短路径问题&&导弹拦截问题)