《校园导游咨询*》设计报告
#include \ #include \ #include \ #include
//********带参构造函数**********
BGraph::BGraph(Site a[], Road b[],int n, int e)//传入顶点类数组a,边类数组b,顶点数、边数 { int i,k; ArcNode *E;
int adv1=-1,adv2=-1,scLv=0; string n1,n2;
vertexNum=n; arcNum=e;
for(i=0;i } for(k=0;k //先插入边 E=new ArcNode; E->distance=b[k].distance; E->adjvex=b[k].s2.code; E->nextarc=adjlist[b[k].s1.code].firstarc; E->sceneLevel=b[k].scnLv; adjlist[b[k].s1.code].firstarc=E; //再插入边 E->distance=b[k].distance; E->adjvex=b[k].s1.code; E->nextarc=adjlist[b[k].s2.code].firstarc; E->sceneLevel=b[k].scnLv; adjlist[b[k].s2.code].firstarc=E; //******初始化距离邻接矩阵********** int a[MaxSize][MaxSize]={}; for(int i=0;i —25— 《校园导游咨询*》设计报告 for(int j=0;j a[i][j]=0; } for(int i=0;i { ArcNode *E; int b; E=adjlist[i].firstarc; while (E) { b=E->adjvex; a[i][b]=E->distance; E=E->nextarc; } } for(int i=0;i dis[i][j]=a[i][j]; } } //******初始化风景邻接矩阵********** int sc[MaxSize][MaxSize]={}; for(int i=0;i sc[i][j]=0; } for(int i=0;i { ArcNode *E; int b; E=adjlist[i].firstarc; while (E) { —26— 《校园导游咨询*》设计报告 b=E->adjvex; sc[i][b]=10-E->sceneLevel; E=E->nextarc; } } for(int i=0;i scn[i][j]=sc[i][j]; } } //***********添加节点************ void BGraph::addSite() { bool flag=false; int adv1=-1,adv2=-1,scLv=0; string temp; Site n; if(vertexNum==MaxSize) cout<<\顶点数已满!\< { do { flag=false; cout<<\请输入要添加的景点名称:\; cin>>temp; for(int i=0;i } } } while(flag); n.siteName=temp; n.code=vertexNum+1; —27— 《校园导游咨询*》设计报告 cout<<\请输入景点信息:\; cin>>n.introduction; flag=true; while(flag) { cout<<\请输入景点X坐标:\; cin>>temp; if(!IsDigit(temp)&&stringToNum { flag=false; n.px=stringToNum } } flag=true; while(flag) { cout<<\请输入景点Y坐标:\; cin>>temp; if(!IsDigit(temp)&&stringToNum { flag=false; n.py=stringToNum } } vertexNum++; adjlist[vertexNum-1].vex=n; adjlist[vertexNum-1].firstarc=NULL; //修改距离邻接矩阵、风景邻接矩阵 for(int i=0;i for(int i=0;i dis[i][vertexNum-1]=UR; —28— 《校园导游咨询*》设计报告 } scn[i][vertexNum-1]=0; dis[vertexNum-1][vertexNum-1]=0; } } //**************添加边********* void BGraph::addRoad() { int scne; Site a,b; ArcNode *E; int adv1=-1,adv2=-1,scLv=0; string n1,n2; cout<<\请输入节点1:\; cin>>n1; a=searchByName(n1); cout<<\请输入节点2:\; cin>>n2; b=searchByName(n2); cout<<\风景等级(1~10):\; cin>>scne; adv1=a.code; adv2=b.code; E=new ArcNode; E->distance=caculateDistance(a,b); E->adjvex=adv2; E->nextarc=adjlist[adv2].firstarc; E->sceneLevel=scne; adjlist[adv1].firstarc=E; dis[adv1][adv2]=E->distance; scn[adv1][adv2]=E->sceneLevel; //再插入边 E->distance=caculateDistance(a,b); E->adjvex=adv1; E->nextarc=adjlist[adv1].firstarc; E->sceneLevel=scne; adjlist[adv2].firstarc=E; dis[adv2][adv1]=E->distance; —29—