10分求助,能说说错在哪里了吗?悬关
查看原帖
10分求助,能说说错在哪里了吗?悬关
1073879
Karl_Wan楼主2024/12/2 22:16

思路:简单的DFS。

记录:https://www.luogu.com.cn/record/192535695

代码:

#include <bits/stdc++.h>
using namespace std;
namespace my_namespace//我把整个程序装进自己的命名空间里了 
{
int n,m,start,target;
int v[100005];//价值 
int ans=(99999999);//先把ans设成一个极值 
struct businessman//商人结构体 
{
    int x,y,cost;
    //根据题意,三个变量分别代表x[j]、y[j]和在这个商人处交易的花费。 
}sr[200005];
vector<int> G[100005];//邻接表:这个商品能在哪些商人处进行交易 
bool vis[100005];// 
void dfs(int sp,int nowcost)//sp:当前商品 nowcost:当前的花费 
{
    if(nowcost>ans) return;//最优性剪枝 
    if(sp==target)//找到解 
    {
        ans=min(ans,nowcost);//打擂法更新 
        return;
    } 
    //转移 
    for(int i:G[sp])
    {
        if(!vis[sr[i].y])
        {
            vis[sr[i].y]=1;
            dfs(sr[i].y,nowcost+sr[i].cost);
            vis[sr[i].y]=0;
        }
    }
}
int main()
{
    cin>>n>>m>>start>>target;
    
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
    }
    for(int i=0;i<m;i++)
    {
        cin>>sr[i].x>>sr[i].y;
        //根据题意,计算该商人处交易的花费 
        if(v[sr[i].x]>v[sr[i].y])
        {
            sr[i].cost=0-(v[sr[i].x]-v[sr[i].y]);
        }
        else
        {
            sr[i].cost=v[sr[i].x]-v[sr[i].y];
        }
        sr[i].cost++;//根据题意,商人需要收取1元手续费 
        G[sr[i].x].push_back(i);
    }
    vis[start]=1;
    dfs(start,0);
    //如果有解输出解,否则输出No solution 
    if(ans!=99999999) cout<<ans;
    else cout<<"No solution";
    
    return 0;
}
};
int main()
{
    int ret=my_namespace::main();
    
    return ret;
}

请重点检查下我的实现细节。能说说错在哪里了吗?谢谢!

2024/12/2 22:16
加载中...