⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 校园导游.cpp

📁 设计一个校园导游程序
💻 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 + -