#编译出现了两个错误,一直找不到,怎么改,谢谢
#include <stdio.h>
void main()
#include<iostream>
#include <fstream>
#include<vector>
#include <map>
#include <deque>
#include <algorithm>
#include <fstream>
using namespace std;
struct vec_load
{
int vnum;
int rest;
vec_load(int i,int j):vnum(i),rest(j){}
} ;
class path
{
public:
deque<int> no;
int dis;
double vec;
int f,r;
path(double v,int i):vec(v),f(i),r(i){ }
};
void creatpath(int& numb,int** dist,vector<double>& load,double re);
int main()
{
int numb=14;
double temp;
cout<<"请输入客户数:"<<endl;
ifstream fin("dist.txt");
cin>>numb;
cout<<"请依次输入各个客户需求量(用空格隔开):"<<endl;
vector<double> load;//用于存储各物流子节点货物量需求量
for(int i=0;i<numb;i++)
{
cin>>temp;
load.push_back(temp);
}
int **dist; //指向存储给节点最短距离的二维数组
dist=new int*[numb+1];
for(int i=0;i<numb+1;i++)
dist[i]=new int[numb+1]{0};
//cout<<"请依次输入各客户到配送中心的最短距离:"<<endl;
for(int i=0;i<numb;i++)
{
fin>>dist[0][i+1];
dist[i+1][0]=dist[0][i+1];
}
for(int i=1;i<numb;i++)
{
//cout<<"请输入"<<i<<"到其编号后的客户的最短距离:"<<endl;
for(int j=i+1;j<=numb;j++)
{
fin>>dist[i][j];
dist[j][i]=dist[i][j];
}
}
//循环获取配送中心的车辆载荷及对应数量,用vector进行存储
double re=15;
// cout<<"请输入车辆载荷"<<endl;
//cin>>re;
creatpath(numb,dist,load,re);
return 0;
}
void creatpath(int& numb,int** dist,vector<double>& load,double re)
{
//新建一个numb维表格存储节约里程
int**save;
save=new int*[numb];
for(int i=0;i<numb;i++)
save[i]=new int[numb]{0};
//计算节约里程并填入save表中指定位置
for(int i=0;i<numb;i++)
{
for(int j=i+1;j<numb;j++)
{
save[i][j]=dist[0][i+1]+dist[0][j+1]-dist[i+1][j+1];
save[j][i]=save[i][j];
}
}
//定义一个类,存储两节的编号以及节约里程,便于后续排序
class Save_node
{
public:
int m,n;
int dis;
void set(int &i,int &j,int&d)
{
this->m=i;
this->n=j;
this->dis=d;
}
};
Save_node temp;
vector<Save_node> rsave;
for(int i=0;i<numb-1;i++)
for(int j=i+1;j<numb;j++)
{
temp.set(i,j,save[i][j]);
rsave.push_back(temp);
}
sort(rsave.begin(),rsave.end(),[](Save_node& s1,Save_node& s2){return s1.dis>s2.dis;});
auto it1=rsave.begin();
/* for(auto &r:rsave)
{
cout<<"\t"<<r.m<<"\t"<<r.n<<"\t"<<r.dis<<endl;
}*/
vector<path> result;
int time=0;
for(auto &v:load)
{
auto ptemp=path(v,time);
ptemp.dis=2*dist[0][time+1];
ptemp.no.push_back(time);
ptemp.f=ptemp.no.front();
ptemp.r=ptemp.no.back();
result.push_back(ptemp);
time++;
}
vector<int> suc;
bool fnode(int& ,path &);
bool rnode(int& ,path &);
while(suc.size()!=numb&&it1!=rsave.end())
{
int head=it1->m;
int back=it1->n;
//cout<<it1->m<<"\t"<<it1->n<<"\t"<<it1->dis<<endl;
auto i1=result.begin();
auto i2=result.begin();
for(;i1!=result.end();i1++)
{
if(i1->f==head||i1->r==head)
break;
}
for(;i2!=result.end();i2++)
{
if(i2->f==back||i2->r==back)
break;
}
if(i1==result.end()||i2==result.end())
{
it1++;
continue;
}
if(i1->no.size()==1)
{
if(i2->no.size()==1)
{
if(i1->vec+i2->vec<=re)
{
i1->no.push_back(back);
i1->dis=i1->dis-dist[0][head+1]+dist[0][back+1]+dist[head+1][back+1];
i1->vec=i1->vec+i2->vec;
i1->f=i1->no.front();
i1->r=i1->no.back();
result.erase(i2);
suc.push_back(head);
suc.push_back(back);
it1++;
continue;
}
}
else
{
if(i2->f==back)
{
if(i2->vec+i1->vec<=re)
{
i2->no.push_front(head);
i2->dis=i2->dis+dist[0][head+1]-dist[0][back+1]+dist[head+1][back+1];
i2->vec=i2->vec+i1->vec;
i2->f=i2->no.front();
i2->r=i2->no.back();
result.erase(i1);
suc.push_back(head);
}
it1++;
continue;
}
else if(i2->r==back)
{
if(i2->vec+i1->vec<=re)
{
i2->no.push_front(head);
i2->dis=i2->dis+dist[0][head+1]-dist[0][back+1]+dist[head+1][back+1];
i2->vec=i2->vec+i1->vec;
i2->f=i2->no.front();
i2->r=i2->no.back();
result.erase(i1);
suc.push_back(head);
}
it1++;
continue;
}
}
}
else//路径1不是初始路径
{
if(i1->f==head)
{
if(i2->no.size()==1)
{
if(i1->vec+i2->vec<=re)
{
i1->no.push_front(back);
i1->dis=i1->dis-dist[0][head+1]+dist[0][back+1]+dist[head+1][back+1];
i1->vec=i1->vec+i2->vec;
i1->f=i1->no.front();
i1->r=i1->no.back();
result.erase(i2);
suc.push_back(back);
}
it1++;
continue;
}
}
else if(i1->r==head)
{
if(i2->no.size()==1)
{
if(i1->vec+i2->vec<=re)
{
i1->no.push_back(back);
i1->dis=i1->dis-dist[0][head+1]+dist[0][back+1]+dist[head+1][back+1];
i1->vec=i1->vec+i2->vec;
i1->f=i1->no.front();
i1->r=i1->no.back();
result.erase(i2);
suc.push_back(back);
}
it1++;
continue;
}
}
}
it1++;
}
int count=1;
for(auto &r:result)
{
cout<<"线路"<<count++<<":"<<"0->";
for(auto &v:r.no)
cout<<v+1<<"->";
cout<<"0"<<"\tdis:"<<r.dis<<"\tload:"<<r.vec<<endl;
}
}
bool fnode(int &m,path &v)
{
if(m==v.no.front())
return true;
return false;
}
bool rnode(int& m,path &v)
{
if(m==v.no.back())return true;
return false;
}
第2行这个void main()太明显了吧……首先现在c/c++不能用void main只能int main,其次怎么能有两个main()函数呢
还有第4行和第9行导入了两个一样的文件,删掉一个