蒟蒻求救WA了9个点
查看原帖
蒟蒻求救WA了9个点
222578
jingkongwanglimiaoa楼主2020/8/19 12:09

【捞一捞】

真的吗真的吗这题只能用最短路做吗

只拿了10分

# include <cstdio>
# include <iostream>
# include <cstring>
# include <algorithm>
using namespace std;
struct sth{
    int sum,num;
}e[30010];//邻接链表结构体
int a,b,n,m,cnt = 0,c,d,ee,te,minn = 0x3f3f3f3f,lk[30010],f[2500][2500];
void srt(int x,int y){
    e[++cnt]={y,lk[x]};
    lk[x] = cnt;
}//邻接链表,已开双倍边
void dfs(int p,int money)
{
    for (int i = lk[p];i != 0;i = e[i].num)
    {
        if (f[p][e[i].sum] == -1)
        {
            continue;
        }//我的思路的是如果走过了就不走这条边了以免到环时死循环
        ee = f[p][e[i].sum];
        f[p][e[i].sum] = -1;//标记走过
        f[e[i].sum][p] = -1;//标记走过
        if (e[i].sum == te)//如果到了目标点
        {
            printf("\n\n");//蒟蒻的调试
            if (money < minn) minn = money + ee;
            printf("%d",money);//调试
            printf("\n\n");//调试
        }
        else
        {
            dfs(e[i].sum,money + ee);//如果没到目标点继续搜
        }
    }
}
int main()
{
    scanf("%d %d %d %d",&n,&m,&c,&te);
    for (int i = 1;i <= m;i++)
    {
        scanf("%d %d",&a,&b);
        scanf("%d",&f[a][b]);
        f[b][a] = f[a][b];
        srt(a,b);//无向图存两次
        srt(b,a);
    }
    dfs(c,0);
    printf("%d",minn);//输出
}

蒟蒻迷惑了不会最短路用了深搜遍历图怎么办

经过蒟蒻多次测试发现money好像只会越来越大?

2020/8/19 12:09
加载中...