游艇网 > > 赛事展会 > 租用游艇问题(C或C++)

租用游艇问题(C或C++)

来源:https://www.apartment80.com 时间:2024-05-17 编辑:admin 手机版

#include <fstream>

#include <iostream>

using namespace std;

#define INFINITE 2000

int main()

{

ifstream infile(input1.txt);

if (!infile)

{

cerr << open input file error! << endl;

return -1;

}

int numOfSite; //出租站个数

infile >> numOfSite;

int *matrix = new int[numOfSite * numOfSite];

int *arrPrevious = new int[numOfSite]; //记录到该站点的最小租金的前一个站点

//读入租金值

for (int i = 0; i != numOfSite; ++i)

{

for (int j = 0; j != numOfSite; ++j)

{

infile >> matrix[i * numOfSite + j];

if (-1 == matrix[i * numOfSite + j]) //在文件中用-1表示无穷

{

matrix[i * numOfSite + j] = INFINITE; //无穷代表不连通

}

}

}

infile.clear();

infile.close();

//第一站的前一站为无

arrPrevious[0] = -1;

//第一站到第二站有路径可达时 ,第二站的前一站就为1

arrPrevious[1] = (INFINITE == matrix[1]) ? -1: 0;

//计算最少1站到各个站的最少租金,结果在矩阵第一行

for (int cul = 2; cul != numOfSite; ++cul) //第三列开始

{

if (matrix[cul] == INFINITE)

{

arrPrevious[cul] = -1;

}

else

{

arrPrevious[cul] = 0; //初始为第一个站点

}

for (int row = 1; row != cul; ++row) // 第二行开始,上三角

{

//如果第row站到cul站的距离加上第一站到第row站的距离

//比第一站到第cul站的最小距离还小的话就替换

//当有多条路径时, <可保证经过的站点是最少的, <= 则为经过的站点最多

if (matrix[row * numOfSite + cul] + matrix[row] < matrix[cul])

{

arrPrevious[cul] = row;

matrix[cul] = matrix[row * numOfSite + cul] + matrix[row];

}

}

}

//第一站1到第numOfSite站的最少租金就在matrix[0][numOfSite - 1]中

ofstream outfile(output.txt);

if (!outfile)

{

cerr << open the output file error! << endl;

return -1;

}

outfile << 最少租金为: << endl;

outfile << matrix[numOfSite - 1] << endl;

int iLast = numOfSite - 1; //下标从零开始,例如下标为4代表站点5

int iCnt = 2; //记录经过的站点的个数 ,2就代表一开始包含两个站点(第一个,最后一个)

//以为主要为记录站点的个数,方便动态分配内存大小

while ( true )

{

iLast = arrPrevious[iLast];

if (iLast == -1)

{

cout << 不可达 << endl;

system(pause);

return -1;

}

if (iLast == 0)

{

break;

}

++iCnt;

}

iLast = numOfSite - 1;

int iPathNum = iCnt; int *arrPath = new int[iPathNum];

while ( true )

{

arrPath[--iCnt] = iLast + 1;

iLast = arrPrevious[iLast];

if (0 == iLast)

{

arrPath[--iCnt] = iLast + 1;

break;

}

}

outfile << 路径如下: << endl;;

for (int site = 0; site != iPathNum; ++site)

{

outfile << arrPath[site] << ;

}

outfile << endl;

delete[]matrix;

delete[]arrPrevious;

delete[]arrPath;

outfile.close();

system(pause);

return 0;

}

WI游艇租赁公司专长于带船员的豪华游艇包租服务,提供奢华大帆船、动力游艇及超级游艇的租赁,涉及全球最美丽的海域,地中海,加勒比海,印度洋,南太平洋,亚洲地区等。

地中海地区包括:

西地中海

科西嘉岛 法国 西班牙 巴塞罗那 白色海岸

意大利 热那亚 里古利亚 那不勒斯 萨勒诺 罗马 撒丁岛 西西里 托斯卡尼 威尼斯

东地中海

克罗地亚 达尔马提亚 史普里特 杜布罗夫尼克 北克罗地亚

希腊 雅典 基克拉底 多得卡尼斯 爱奥尼亚海

土耳其

加勒比海地区: 美国,巴西,巴拿马,巴哈马群岛,委内瑞拉

印度洋地区:塞舌尔,马尔代夫,马达加斯加

亚洲地区: 泰国,马来西亚,印度尼西亚,巴厘岛,缅甸,新加坡,香港

太平洋地区:波利尼西亚,澳大利亚,新西兰,斐济,汤加

#include <iostream>

using namespace std;

int cal( int nn,int **aa )

{

int cost=aa[1][nn];

if ( nn==2 )

return cost;

else

{

for ( int i=2; i<nn; i++)

if( cost > ( cal( i, aa )+aa[i][nn] ) )

cost=( cal( i, aa )+aa[i][nn] );

return cost;

}

}

int main()

{

int i,j,n;

cin >> n;

int **a=new int*[n];

for( i=0; i<n; i++)

a[i]=new int[n+1];

for ( i=0; i<n; i++)

for( j=0; j<n+1; j++)

a[i][j]=0;

for ( i=1; i<n; i++ )

for ( j=i+1; j<=n; j++)

cin >> a[i][j];

cout << cal( n,a ) << endl;

return 0;

}

#include <iostream>

using namespace std;

int CalCharge(int *iCharge, int *iTotal, int num, int total);

int main()

{

int count;

cin >> count;

if (count <= 1)

return 1;

int *iCharge = new int[count * count];

int *iTotal = new int[count];

int result = 0;

int *iCharge1 = iCharge;

int *iTotal1 = iTotal;

for (int i=0; i<count*count; i++)

*(iCharge1++) = 0;

for (int i=0; i<count; i++)

*(iTotal1++) = 0;

result = 0;

for (int i=0; i<(count-1); i++)

{

iCharge1 = iCharge + i*count;

for (int j=(i+1); j<count; j++)

{

cin >> *(iCharge1 + j);

}

}

for (int i=(count-2); i>=0; i--)

{

*(iTotal + i) = CalCharge(iCharge, iTotal, i, count);

}

result = *iTotal;

cout << result << endl;

delete[] iCharge;

delete[] iTotal;

return 0;

}

int CalCharge(int *iCharge, int *iTotal, int num, int total)

{

iCharge += num * total;

int min = INT_MAX;

for (int i=(num+1); i<total; i++)

{

int temp = (*(iCharge + i)) + (*(iTotal + i));

if (temp < min)

min = temp;

}

return min;

}

最近更新

赛事展会排行榜精选