求助!!pta 数据结构 哈利波特的考试

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>

int map[101][101]={0};
int Data[101]={0};//已标记
int done[101]={0};//已操作
int lenth[101]={0};//记录顶点路径长
int sum[101]={0};//每次遍历最远路径
int check1(int N){
    int i;
    for(i=1;i<=N;i++){
        if(Data[i]==0)
            return 1;
    }
    return 0;
}
int check2(int N){
    int i;
    for(i=1;i<=N;i++){
        if(done[i]==0)
            return 1;
    }
    return 0;
}
int findlim(int N){//从图中找到最小路径顶点 并确认
    int i;
    int a=-1;
    for(i=1;i<=N;i++){
        if(Data[i]&&!done[i]){
            if(a==-1)
                a=i;
            else{
                if(lenth[i]<lenth[a])
                    a=i;
            }
        }
    }
    return a;
}//finlim right
void sure(int lim,int N){
    int i;
    for(i=1;i<=N;i++){
        if(Data[i]&&map[i][lim]){
            if(lenth[lim]>lenth[i]+map[lim][i])
                lenth[lim]=lenth[i]+map[lim][i];
        }
    }
    done[lim]=1;
}
int research(int N,int hang){
    int i,lim,n=0,max;
    for(i=1;i<=N;i++){
        Data[i]=0;
        lenth[i]=10000;
        done[i]=0;
    }
    Data[hang]=1;
    lenth[hang]=0;
    while(check2(N)){
        lim=findlim(N);
        for(i=1;i<=N;i++){
            if(!Data[i]&&map[lim][i]){
                lenth[i]=lenth[lim]+map[lim][i];
                Data[i]=1;
            }
        }
        sure(lim, N);
        n++;
        if(n>N){
            break;
        }
    }
    if(n>N)
        return 0;
    max=lenth[1];
    for(i=2;i<=N;i++){
        if(lenth[i]>max)
            max=lenth[i];
    }
    return max;
}
int main(){
    int N,M;
    int i,VE1,VE2,weight;
    scanf("%d %d",&N,&M);
    for(i=0;i<M;i++){
        scanf("%d %d %d",&VE1,&VE2,&weight);
        map[VE1][VE2]=map[VE2][VE1]=weight;
    }
    for(i=1;i<=N;i++){
        sum[i]=research(N, i);
        if(sum[i]==0){
            printf("0");
            return 0;
        }
    }
    M=1;
    for(i=1;i<=N;i++){
        if(sum[i]<sum[M])
            M=i;
    }
    printf("%d %d",M,sum[M]);
    return 0;
}

算法就是多次求每个动物的最长魔法口诀长度 然后选取最短的。
但是最后一个怎么都过不去 百思不解 求大神求助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值