POJ3411 Paid Roads 解题报告
来源:互联网 发布:中世纪2优化9经验 编辑:程序博客网 时间:2024/05/23 23:07
这题参考了他人的题解
这题是DFS ,因为路径有要求如果经过某个点,费用不一样,所以有可能多次经过同一点,数据是10条边,所以最多可以经过一个点5次(不是一些题解中说的3次)
如图,目标点是E,但是为了求最小费用,要经过F点5次,所以当一个点经过次数大于5次时,代表出现环,退出dfs
#include<cstdio>#include<cstring>#include<iostream>using namespace std;struct node{int x,y,c,d1,d2,next;}a[210];int len,first[210];int n,m , answer = 99999999;int v[210];void ins( int x,int y,int c,int d1,int d2 ){len++;a[len].x=x; a[len].y=y; a[len].c=c;a[len].d1=d1; a[len].d2=d2;a[len].next = first[x]; first[x] = len;}void find( int x,int pay ){if( x == n ){ answer = min( answer,pay ); return; }v[x] ++;if( v[x]<=5 )for( int k=first[x];k;k=a[k].next ){int y=a[k].y;if( v[ a[k].c ] ) find( y,pay+a[k].d1 );else find( y,pay+a[k].d2 );}v[x] --;}int main(){freopen("tmp.in","r",stdin);freopen("tmp.out","w",stdout);memset( first,0,sizeof first ); len = 0;memset( v,0,sizeof v );int i,j,x,y,c,d1,d2;scanf("%d%d",&n,&m);for(i=1;i<=m;i++){scanf("%d%d%d%d%d",&x,&y,&c,&d1,&d2);ins( x,y,c,d1,d2 );}find( 1,0 );if( answer != 99999999 ) printf( "%d\n", answer );else printf( "impossible\n" );return 0;}
0 0
- POJ3411 Paid Roads 解题报告
- poj3411 Paid Roads
- POJ3411--Paid Roads
- poj3411 Paid Roads---dfs
- POJ3411 Paid Roads DFS
- POJ3411 Paid Roads
- POJ3411--Paid Roads
- POJ3411-Paid Roads
- POJ3411-Paid Roads
- poj3411--Paid Roads(bfs+状压)
- 【POJ3411】-Paid Roads 搜索剪枝
- poj3411——Paid Roads
- poj3411 Paid Roads 状压+最短路
- poj3411解题报告
- 【搜索】poj3411 paid road
- Paid Roads
- poj1724 ROADS 解题报告
- 1251 Jungle Roads 解题报告
- Ubuntu 下Minicom安装和配置
- Selenium WebDriver高亮对象
- ActionScript3.0效率优化
- Ubuntud 下不可挂载Windows 分区的解决方法
- 基于点阵字库的汉字显示
- POJ3411 Paid Roads 解题报告
- 内部命令VS外部命令
- 导入导出oracle字符集问题——NLS_LANG 参数
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- 转:Linux命令英文对照表
- java反射的应用
- V4L2框架分析学习
- mysql 事务
- Hibernate4.3.8 buildSessionFactory过时解决方案HibernateUtil