📄 校园导游.cpp
字号:
#include"图.h"
void InitGraph(Graph&g)
{
g.vexNum=0;
g.edgeNum=0;
for(int i=0;i<MAXVTXNUM;i++)
{
g.Adjmulist[i].firstEdge=NULL;
}
}
int LocateVex(Graph&g,char*uname)
{
int i;
for(i=0;i<g.vexNum;i++)
{if(!(strcmp(uname,g.Adjmulist[i].data.name)))return --i;}
return -1;
}
void GetVex(Graph g,int i,VertexType&v)
{
v=g.Adjmulist[i].data;
}
EdgePtr FirstEdge(Graph g,int vi)
{
//返回个中指向依附于顶点vi的第一条边的指针
return g.Adjmulist[vi].firstEdge;
}//FirstEdge
void NextEdge(Graph g,int vi,EdgePtr p,EdgePtr&q)
{
//以vj返回g中依附于顶点vi的一条边的另一端点
//以q返回g中依附于顶点vi相对于p所指边的下一条边
if(p->elem.ivex==vi){ q=p->ilink; }
else {q=p->jlink; }
}//NextEdge
void InsertVex(Graph&g,VertexType v)
{
//在图g的邻接多重表中添加一个顶点e
g.Adjmulist[g.vexNum].data=v;
g.Adjmulist[g.vexNum].firstEdge=NULL;
g.vexNum++;
}//InsertVex
void InsertEdge(Graph&g,EdgeType e)
{
//在图g的邻接多重表中添加一条边e
EdgePtr p=(EdgePtr)malloc(sizeof(EdgeNode));
p->elem=e;
p->ilink=FirstEdge(g,e.ivex);
p->jlink=FirstEdge(g,e.jvex);
p->tag=0;
g.Adjmulist[e.ivex].firstEdge=p;
g.Adjmulist[e.jvex].firstEdge=p;
g.edgeNum++;
}//InsertEdge
int CreateGraph(Graph&g,char*str)
{
//建立图的多重邻接表
ifstream fin(str);
if(fin.fail()){cout<<"输入的文件名错误!";return 0;}
int vn,en;
fin>>vn>>en;
VertexType v;
EdgeType e;
for(int i=0;i<vn;i++)
{
fin>>v.name>>v.info;
InsertVex(g,v);
}
for(i=0;i<en;i++)
{
fin>>e.ivex>>e.jvex>>e.length;
if(e.length)InsertEdge(g,e);
}
fin.close();
return 1;
}//CreateGraph
void ShowVex(Graph g,int vi)
{
if(vi>=g.vexNum){cout<<"\n此处景点是不存在的!"; return;}
cout<<endl<<"此处景点名为:"<<g.Adjmulist[vi].data.name<<endl<<"次处景点信息:"<<g.Adjmulist[vi].data.info<<endl;
}//ShowVex
void ShowGraph(Graph&g)
{
EdgePtr e=NULL,p=NULL;
if(g.vexNum==0){cout<<"\n校园景点信息还没有创建!";return;}
cout<<"\n已经创建好了的的校园景点以及其路径如下所示:\n";
cout<<"\n景点的编号\t景点的名称\n";
for(int i=0;i<g.vexNum;i++)
{
cout<<i<<"\t\t"<<g.Adjmulist[i].data.name<<endl;
}
cout<<"\n路径(景点1编号,景点2编号)\t路径长度\n";
for(i=0;i<g.vexNum;i++)
{
e=FirstEdge(g,i);
while(e!=NULL)
{
if(e->tag==0)
{
cout<<"\n("<<e->elem.ivex<<","<<e->elem.jvex
<<")\t\t\t\t"<<e->elem.length ;
}
e->tag=1;
NextEdge(g,i,e,e);
}
}
cout<<endl;
}//ShowGraph
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -