poj1724 ROADS
来源:互联网 发布:36氪网站源码 编辑:程序博客网 时间:2024/05/22 00:08
题目的意思:给出一定的钱,从1到N,每走一条路径都需要一定的花费,问从1到N在花费不超过的情况下,最短路径。
这题可以用深搜来做,也可以用dijkstra的优先队列来做
深搜的方法:
#include<stdio.h> #include<string.h> #include<stdlib.h> int K , N , E ; int min_distance ; int curdistance ,curcost; bool visit[105] ; int head[105] , t ; struct node { int u , v , d , w ; int next ; }Adjlist[100005] ; void CreateGraph (int K , int N , int E ) { int u , v , d , w ; memset(head , 0 , sizeof(head) ) ; //init t = 1 ; while ( E-- ) { scanf("%d%d%d%d" , &u , &v , &d , &w ) ; Adjlist[t].u = u ; Adjlist[t].v = v ; Adjlist[t].d = d; Adjlist[t].w = w ; Adjlist[t].next = head[u] ; head[u] = t++ ; } } void dfs ( int u ) { if ( curcost > K || (curdistance >=min_distance) ) return ; if ( u == N ) { min_distance = curdistance ; return ; } for (int i = head[u] ; i ; i = Adjlist[i].next ) if ( ! visit[Adjlist[i].v] ) { visit[Adjlist[i].v] = true ; curdistance+= Adjlist[i].d; curcost+=Adjlist[i].w; dfs ( Adjlist[i].v ) ; visit[Adjlist[i].v] = false ; curdistance-= Adjlist[i].d; curcost-=Adjlist[i].w; } } int main () { //freopen("a.txt","r",stdin); //int test ; //scanf("%d" , &test ) ; //while ( test -- ) //{ scanf("%d%d%d" , &K , &N , &E ) ; CreateGraph ( K , N , E ) ; min_distance = 2000000000 ; memset ( visit , false , sizeof(visit) ) ; curdistance=0; curcost=0; visit[1]=true; dfs( 1 ) ; if ( min_distance != 2000000000 ) printf("%d\n" , min_distance ); else printf("-1\n"); //} return 0 ; }
dijkstra的优先队列:
#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct Map{ int next;int v;int w; int len; int coins;}map[100005];//邻表int head[105];struct Node{ int a; int len; int coins; bool operator < (const Node &b) const { if(len==b.len) return coins>b.coins; return len>b.len; }}start,temp,tex;priority_queue<Node>Q;int K,N,M;int dijkstra(int k){ int i; start.a=map[k].v; start.len=0; start.coins=0; Q.push(start); while(!Q.empty()) { temp=Q.top(); Q.pop(); if(temp.a==N)return temp.len;//寻找到目标结点 for(i=head[temp.a];i;i=map[i].next)if(temp.coins+map[i].coins<=K){tex.a=map[i].w;tex.len=temp.len+map[i].len;tex.coins=temp.coins+map[i].coins;Q.push(tex);} } return -1;}int main(){//freopen("aa.txt","r",stdin); int a,b,l,va,t,i,k,p;//scanf("%d",&t);//while(t--)//{memset(head,0,sizeof(head));scanf("%d%d%d",&K,&N,&M);p=1;for(i=1;i<=M;i++){scanf("%d%d%d%d",&a,&b,&l,&va);//建立邻接表if(a==1)k=p;map[p].v=a;map[p].w=b;map[p].len=l;map[p].coins=va;map[p].next=head[a];head[a]=p;p++;}printf("%d\n",dijkstra(k));//} return 0;}
- poj1724 ROADS
- poj1724 - ROADS
- ROADS poj1724
- POJ1724--ROADS
- POJ1724 ROADS
- POJ1724-ROADS
- poj1724 ROADS
- poj1724 ROADS
- POJ1724 ROADS
- poj1724——ROADS
- poj1724 ROADS (spfa + A*)
- poj1724 ROADS 解题报告
- poj1724 roads(dfs)
- poj1724——ROADS
- POJ1724 ROADS最短路问题
- poj1724 openjudge1724 ROADS 解题记录
- 【POJ1724】ROADS 某邪恶最短路
- poj1724--ROADS(最短路变形)
- 【转】WIN7远程桌面连接方法
- java_war
- sysfs API总结
- 【转】多机共享 如何设置网络打印机共享难题
- 【转】教你如何设置局域网内打印机共享
- poj1724 ROADS
- Android如何获得Root权限来卸载程序?
- 常见数据库的连接URL
- PowerShell 2.0 实践(一)操作文件系统
- .war
- 交换机、集线器和路由器区别
- PowerShell 2.0 实践(二)操作文件系统(续)
- 参考网站
- UIButton