【bfs优先队列】POJ 3635
2012-03-06 12:15
274 查看
http://poj.org/problem?id=3635
#define N 1005 struct node{ int u; int len; }; vector<node> v ; int n,m; int price ; void add(int a,int b,int w){ node tmp; tmp.u = b; tmp.len = w; v[a].push_back(tmp); tmp.u = a; v[b].push_back(tmp); } struct Node{ int id;//点编号 int res;//剩余油量 int val;//最小花费 friend bool operator < (Node a,Node b){ return a.val>b.val; } }; int dp[1001][101];//dp[i][j]表示到达i点后还剩j油量 bool vis[1001][101];//记录状态是否访问过 int bfs(int c,int s,int t){ priority_queue<Node> pp; int i,j,k; dp[s][0] = 0; Node cur,next; cur.id = s; cur.res = 0; cur.val = 0; vis[s][0] = 1; pp.push(cur); while(!pp.empty()){ cur = pp.top(); pp.pop(); int u = cur.id; int res = cur.res; int val = cur.val; vis[u][res] = 1; if(u == t){ return val; } ///每个点有两个选择,要么自己加油,要么走到下一点 if(res+1 <= c && !vis[u][res+1] && dp[u][res+1]>dp[u][res] + price[u]){ next.id = u; next.res = res+1; next.val = dp[u][res] + price[u]; dp[u][res+1] = dp[u][res]+price[u]; pp.push(next); } for(i=0;i<v[u].size();i++){ int vv = v[u][i].u; k = res-v[u][i].len; if(k<=c && k>=0 && !vis[vv][k] && val<dp[vv][k]){ dp[vv][k] = val; next.id = vv; next.res = k; next.val = val; pp.push(next); } } } return -1; } int main(){ while(scanf("%d%d",&n,&m) != -1){ int i,j,k; for(i=0;i<n;i++){ v[i].clear(); scanf("%d",&price[i]); } while(m--){ int a,b,w; scanf("%d%d%d",&a,&b,&w); add(a,b,w); } scanf("%d",&m); while(m--){ int c,s,t; scanf("%d%d%d",&c,&s,&t); for(i=0;i<=n;i++){ for(j=0;j<=c;j++){ dp[i][j] = MAX; vis[i][j] = 0; } } int ans = bfs(c,s,t); if(ans==-1)puts("impossible"); else printf("%d\n",ans); } } return 0; }
相关文章推荐
- poj 3635 Full Tank? (优先队列 + bfs)
- poj 2312 bfs+优先队列 入门题
- 【bfs优先队列】POJ 2312
- 【BFS+优先队列】Battle City(poj-2312)
- 【dijkstra + 优先队列 && bfs && A*】POJ - 2449 Remmarguts' Date
- poj 2312 Battle City【bfs+优先队列】
- POJ 2049 Finding Nemo BFS 三维数组存状态, 优先队列优化时间与空间
- POJ 1724 ROADS(费用最短路:优先队列+BFS)
- POJ ROADS DFS BFS 优先队列 入门
- POJ-1724-ROADS(优先队列,邻接表,BFS)
- POJ 2312:Battle City【BFS & 优先队列】
- POJ 2312 Battle City【Bfs+优先队列】
- POJ 2312 Battle City(优先队列 + BFS)
- POJ 1724 ROADS(使用邻接表和优先队列的BFS求解最短路问题)
- hdu1026【bfs优先队列】
- POJ 1442 堆的应用 优先队列
- POJ 2442 优先队列
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- NYOJ - 1100 - WAJUEJI which home strong!(BFS变形,优先队列)
- 【bfs+优先队列】POJ2312-Battle City