zoukankan      html  css  js  c++  java
  • C

    题意:给n*n的01矩阵,1i与j联通,0不联通,给m个点,表示依次走m个点,要求这些点的最短子序列,使最短子序列里的点走完的最短路与走完m个点的相同。

    思路:先floyd预处理两两点之间的最短距离,预处理时需要注意i到i点距离为0,之后将第一个点放入答案,枚举答案的最后一个顶点与m中第二个顶点开始的点的距离,如果距离相同,可以不选择m中的这个点,如果距离变小,答案中需要加上这个点的前一个点。

    #include<bits/stdc++.h>
    using namespace std;
    const int INF=0x3f3f3f3f;
    const int maxm=1e6+10;
    char mp[200][200];
    int e[200][200];
    int l[maxm];
    int ans[maxm];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
            scanf("%s",mp[i]+1);
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
                if(i==j) e[i][j]=0;
                else e[i][j]=INF;
            }
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
                if(mp[i][j]=='1')
                    e[i][j]=1;
            }
        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(e[i][k]<INF&&e[k][j]<INF&&e[i][j]>e[i][k]+e[k][j])
                        e[i][j]=e[i][k]+e[k][j];
                }
            }
        int m;
        scanf("%d",&m);
        for(int i=1; i<=m; i++)
            scanf("%d",&l[i]);
        int cnt=0;
        ans[++cnt]=l[1];
        int dis=0;
    
        for(int i=2; i<=m; i++)
        {
            dis+=e[l[i-1]][l[i]];
            if(e[ans[cnt]][l[i]]<dis)
            {
                ans[++cnt]=l[i-1];
                dis=e[ans[cnt]][l[i]];
            }
        }
        ans[++cnt]=l[m];
        printf("%d
    ",cnt);
        for(int i=1; i<=cnt; i++)
            printf("%d ",ans[i]);
    }
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/11392972.html
Copyright © 2011-2022 走看看