poj 3411 Paid Roads(DFS)

来源:互联网 发布:网络安全法的特点 编辑:程序博客网 时间:2024/06/06 08:46

题目链接:http://poj.org/problem?id=3411

题意:有n座城市,编号1~n,从a到b如果已经经过c城市,则需要p费用,否则需要r费用,问从1到n的最小费用是多少。

①DFS:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int INF=0x3f3f3f3f;const int maxn=15;int n,m;int a[maxn],b[maxn],c[maxn],p[maxn],r[maxn];int vis[maxn];int ans;struct node{int a,b,c,p,r;}road[maxn];void dfs(int t,int fee){if(t==n&&fee<ans){ans=fee;return ;}if(vis[t]>3) return ;for(int i=1;i<=m;i++){if(road[i].a==t){vis[road[i].b]++;if(vis[road[i].c])dfs(road[i].b,fee+road[i].p);elsedfs(road[i].b,fee+road[i].r);vis[road[i].b]--;}}}int main(){#ifndef ONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifwhile(~scanf("%d%d",&n,&m)){for(int i=1;i<=m;i++){scanf("%d%d%d%d%d",&road[i].a,&road[i].b,&road[i].c,&road[i].p,&road[i].r);}ans=INF;memset(vis,0,sizeof(vis));dfs(1,0);if(ans==INF) puts("impossible");else printf("%d\n",ans);}return 0;}


0 0
原创粉丝点击