汽车加油行驶问题
来源:互联网 发布:阿里云记录值 编辑:程序博客网 时间:2024/06/09 23:47
#include "iostream"#include "algorithm"#include "fstream"using namespace std;#define INF 10000/*f[i][j][0]表示汽车从网格点(1,1)行驶至网格点(i,j)所需的最少费用f[i][j][1]表示汽车行驶至网格点(i,j)还能行驶的网格边数s[i][0]表示x轴方向s[i][1]表示y轴方向s[i][2]表示行驶费用f[i][j][0] = min{f[ i+s[k][0] ][ [j+s[k][1] ][0] + s[k][2]}f[i][j][1] = f[ i+s[k][0] ][ [j+s[k][1] ][1] - 1;f[1][1][0] = 0f[1][1][1] = Kf[i][j][0] = f[i][j][0] + A , f[i][j][1] = K 如果(i, j)是油库f[i][j][0] = f[i][j][0] + C + A, f[i][j][1] = K (i, j)不是油库,且f[i][j][1] = 0*/int N; //方形网络规模int A; //汽车在行驶过程中遇到油库应加满油并付加油费Aint C; //在需要时可在网格点处增设油库,并付增设油库费用C(不含加油费A)int B; //当汽车行驶经过一条网格边时,如果其x坐标或y坐标减少,应付费用Bint K; //装满油后,还能行驶K条边int f[50][50][2];int s[4][3] = {{-1,0,0},{0,-1,0},{1,0,B},{0,1,B}};int a[50][50]; //方形网络int dyna(){ int i, j, k; for (i=1;i<=N;i++) { for (j=1;j<=N;j++) { f[i][j][0]=INF; f[i][j][1]=K; } } f[1][1][0] = 0; f[1][1][1] = K; int count = 1; int tx, ty; while(count) { count = 0; for(i=1; i<=N; i++) { for(int j=1; j<=N; j++) { if(i==1 && j==1) continue; int minStep = INF; int minDstep; int step, dstep; for(k=0; k<4; k++) //可走的四个方向 { tx = i + s[k][0]; ty = j + s[k][1]; if(tx<1 || ty<1 || tx>N || ty>N) //如果出界 continue; step = f[tx][ty][0] + s[k][2]; dstep = f[tx][ty][1] - 1; if(a[i][j] == 1) //如果是油库 { step += A; dstep = K; } if(a[i][j]==0 && dstep == 0 && (i!=N||j!=N)) //如果不是油库,且油已经用完 { step += A + C; dstep = K; } if(step < minStep) //可以走 { minStep = step; minDstep = dstep; } } if(f[i][j][0] > minStep) //如果有更优解 { count++; f[i][j][0] = minStep; f[i][j][1] = minDstep; } } } } return f[N][N][0];}int main(){ ifstream fin("car.txt"); cout << "输入方格规模:"; fin >> N; cout << N; cout << "\n输入装满油后能行驶的网格边数:"; fin >> K; cout << K; cout << "\n输入加油费:"; fin >> A; cout << A; cout << "\n输入坐标减少时应付的费用:"; fin >> B; cout << B; s[2][2] = s[3][2] = B; cout << "\n输入增设油库费用:"; fin >> C; cout << C; cout << "\n输入方形网络:\n"; for(int i=1; i<=N; i++) { for(int j=1; j<=N; j++) { fin >> a[i][j]; cout << a[i][j] << " "; } cout << endl; } cout << "最优行驶路线所需的费用为:" << dyna() << endl; fin.close(); return 0;}
0 0
- 汽车行驶加油问题
- 汽车加油行驶问题
- 汽车加油行驶问题
- 汽车加油行驶问题
- 【dp】汽车加油行驶问题
- 汽车加油行驶问题专题
- [codevs 1912] 汽车加油行驶问题
- 线性规划与网络流24题:《汽车加油行驶问题》
- 汽车加油行驶问题(分层图最短路)
- 【codevs1912】汽车加油行驶问题 分层图最短路
- 【网络流24题】汽车加油行驶问题
- 网络流24题15. 汽车加油行驶问题
- 网络流24题之T15 汽车加油行驶问题
- 网络流24题 之十五 汽车加油行驶问题 分层图
- 【线性规划与网络流24题】汽车加油行驶问题 分层图
- light oj 1254 - Prison Break (Dijkstra 汽车加油行驶最优问题 最短路)
- loj6223「网络流 24 题」汽车加油行驶问题(分层图spfa)
- [网络流24题-15] 汽车加油行驶 - 分层图
- 昌大软院大神养成计划之网页设计大赛第三天
- 关于jsp的basepath和path的使用
- tiny4412 linux开发环境之 hello linux!
- Reverse Linked List
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- 汽车加油行驶问题
- Scala高阶函数
- AVL树C++实现
- 黑马程序员-Java基础
- 野人学Android第二弹——多Activity之间的生命周期的规律摸索及多个Activity同时销毁的实现
- 一步步学习电子维修
- 二叉树中两个节点的最近公共父节点
- 10018---JavaWeb基础--过滤器(Filter)
- JS获取 select标签里的值