谁能把这四段程序连起来???

h547758424 2009-06-11 04:27:49
int n,k,a,b,c,s,t,f,nn,**map
int dir[4][2]
void read()
{
dir[0][0]=0; dir[0][1]=1;
dir[1][0]=1; dir[1][1]=0;
dir[2][0]=0; dir[2][1]=-1;
dir[3][0]=-1;dir[3][1]=0;
cin>>n>>a>>b>>c;
Make2Darray(map,n+1,n+1 for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>map[i][j]
}读入初始数据

constructG构造相应的网络
int num(int i,int j)
{
return((i-1)*n+j-1)*(k+2)+2;
}
void constructG(GRAPH<EDGE>&G)
{
s=0;t=1;f=1;
int i,j,d,e,cost,i1,j1,k1,k2.
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
k1=num(i,j);
for(e=1;e<=k;e++)
{
for(d=0;d<4;d++)
{
i1=i+dir[d][0];
j1=j+dir[d][1];
if(i1>0&&i1<=n&&j1>0&&j1<=n)
{
cost=(d>1)?b:0;
k2=num(i1,j1);
if(map[i][j])G.insert(new EDGE(k1+1,k2+k-1,1,cost+a));
else G.insert(new EDGE(k1-1,k2+e-1,1,cost));
}
}
}
if(!map[i][j])G.insert(new EDGE(k1,k1+k+1,1,a+c));
G.insert(new EDGE(k1+k+1,k1+k,5*(k+2),0));
}
G.insert(new EDGE(s,k+2,1,0));
k1=num(n,n);
for(e=0;e<=k;e++)G.insert(new EDGE(k1+e,t,1,0));
}

实现算法的主函数如下
int main()
{
read();
nn=n*n*(k+2)+1;
GRAPH<EDGE>G(nn,1);
constructG(G);
MINCOST<GRAPH<EDGE>,EDGE>(G,s,t,f);
output(G);
return 0;
}

output输出最小费用
void output(GRAPH<EDGE>&G)
{
int sum=0;
for(int i=2;i<=nn;i++)
{
adjlterator<EDGE>A(G,i);
for(EDGE*e=A.beg();!A.end();e=A.net())
if(e->from(i)&&e->flow()>0&&e->cost()>0)
sum+=e->cost()*e->flow();
}
cost<<sum<<endl;
}
...全文
45 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
h547758424 2009-06-11
  • 打赏
  • 举报
回复
是关于汽车加油问题的:问题描述及编程任务
问题描述:给定一个N×N的正方形网格,设其左上角为起点◎,坐标为(1,1),X轴向右为正,Y轴向下为正,每个方格边长为1,如图所示.一辆汽车从起点◎出发驶向右下角终点▲,其坐标为(N,N).在若干个网格交叉点处,设置了油库,可供汽车在行驶途中加油.汽车在行驶过程中应遵守如下规则:
(1)汽车只能沿网格边行驶,装满油后能行驶K条网格边.出发时汽车已装满油,在起点与终点处不设油库.
(2)汽车经过一条网格边时,若其X坐标或Y坐标减小,则应付费用B,否则免付费用.
(3)汽车在行驶过程中遇油库则应加满油并付加油费用A.
(4)在需要时可在网格点处增设油库,并付增设油库费用C(不含加油费用A)
N,K,A,B,C均为正整数,且满足约束:2≤N≤100, 2≤K≤10
求出汽车从起点出发到达终点的最少费用.
示 例
数据输入:由文件input.txt提供输入数据.文件的第一行是N,K,A,B,C的值.第二行起是一个N*N 的0-1 方阵,每行N 个值,至N+1 行结束.方阵的第i 行第j 列处的值为1 表示在网格交叉点(i,j)处设置了一个油库,为0 时表示未设油库.各行相邻两个数以空格分隔.
输入文件示例 输出文件示例
input.txt output.txt
9 3 2 3 6 12
0 0 0 0 1 0 0 0 0
0 0 0 1 0 1 1 0 0
1 0 1 0 0 0 0 1 0
0 0 0 0 0 1 0 0 1
1 0 0 1 0 0 1 0 0
0 1 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 1 0
0 1 0 0 0 0 0 0 0

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧