2.1在dist[n]中求最小值,其编号为K;
2.2输出dist[k]和path[k];
2.3修改数组dist和path;
2.4将顶点k添加到数组s中;
(四)详细设计
#include
usingnamespacestd;
constintmaxsize=10;
constintMAX=10000;
intdefault_e[maxsize][maxsize]={0,100,150,MAX,100,400,MAX,MAX,MAX,MAX,
100,0,MAX,MAX,MAX,MAX,MAX,MAX,MAX,400,
150,MAX,0,100,MAX,MAX,50,MAX,MAX,MAX,
MAX,MAX,100,0,MAX,MAX,MAX,200,100,200,
100,MAX,MAX,MAX,0,250,MAX,MAX,MAX,MAX,
400,MAX,MAX,MAX,250,0,100,300,MAX,MAX,
MAX,MAX,50,MAX,MAX,100,0,MAX,MAX,MAX,
MAX,MAX,MAX,200,MAX,300,MAX,0,150,MAX,
MAX,MAX,MAX,100,MAX,MAX,MAX,150,0,150,
MAX,400,MAX,200,MAX,MAX,MAX,MAX,150,0};
intdefault_v[maxsize]={0,1,2,3,4,
5,6,7,8,9};
structview_spot_node{
charname[maxsize];
intcodename;
view_spot_nodeoperator=(view_spot_node&v)
{
codename=v.codename;
for(inti=0;iname[i]=v.name[i];
returnv;
}
};
view_spot_nodedefault_vsn[maxsize]={"景点A",1,
"景点B",2,
"景点C",3,
"景点D",4,
"景点E",5,
"景点F",6,
"景点G",7,
"景点H",8,
"景点I",9,
"景点J",10};
classGrahp{
public:
Grahp(inte[maxsize][maxsize],intv[maxsize]=default_v);
intshortest_way(ints,intd);
intstore_v[maxsize];
intdistance[maxsize];
private:
intBFS(ints,intd);
voidstore(intd);
intedge[maxsize][maxsize];
intvertex[maxsize];
intq[maxsize];
intstate[maxsize][maxsize];
intprevious[maxsize];
};
Grahp:
:
Grahp(inte[maxsize][maxsize],intv[maxsize])
{
for(inti=0;i{
vertex[i]=v[i];
for(intj=0;jedge[i][j]=e[i][j];
}
}
intGrahp:
:
shortest_way(ints,intd)
{
for(inti=0;i{
q[i]=0;
distance[i]=MAX;
previous[i]=i;
store_v[i]=0;
for(intj=0;j{
if(edge[i][j]!
=MAX&&edge[i][j]!
=0)
state[i][j]=1;
elsestate[i][j]=0;
}
}
distance[s]=0;
BFS(s,d);
store(d);
returndistance[d];
}
intGrahp:
:
BFS(ints,intd)
{
if(s==d)return0;
intk;
intleft=maxsize;
while(left--){
intmin=MAX;
for(inti=0;i{
if(q[i]==0&&distance[i]{
min=distance[i];
k=i;
}
}
q[k]=1;
if(k==d)return0;
for(intj=0;j{
intdis=distance[k]+edge[k][j];
if(state[k][j]&&distance[j]>dis)
{
distance[j]=dis;
previous[j]=k;
}
}
}
return0;
}
voidGrahp:
:
store(intd)
{
staticintnum=0;
if(d==previous[d])
{
//cout<store_v[num++]=d+1;
return;
}
store(previous[d]);
store_v[num++]=d+1;
//cout<}
classcampus_guide:
publicGrahp{
public:
campus_guide(inte[maxsize][maxsize]=default_e,view_spot_nodev[maxsize]=default_vsn);
voidguide(ints,intd);
private:
view_spot_nodeview_spot[maxsize];
};
campus_guide:
:
campus_guide(inte[maxsize][maxsize],view_spot_nodev[maxsize])
:
Grahp(e)