大三今日总结.

以邻接表的存储方式,创建一个有向网,顶点为字符型。

include

using namespace std;
//邻接表:顶点表、边表、邻接表

define MVNum 100

typedef char OtherInfo;
typedef struct ArcNode//边表
{
int adjvex;//下标
struct ArcNode *nextarc;//指向下一个边表
int info;//其他信息(权值,类型int)
}ArcNode;
typedef struct VNode//顶点
{
char data;
struct ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct//邻接表
{
AdjList ver;
int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,char v)
{//在表头结点查找v
for(int i=0;i<MVNum;i++){
if(G.ver[i].datav)return i;
}
return -1;
}
void Create(ALGraph &G,int &error)
{//创建有向网,如果有顶点输入信息有无,存放信息在error中
cin>>G.vexnum>>G.arcnum;//输入顶点和边数
for(int i=0;i<G.vexnum;i++)
{
cin>>G.ver[i].data;//输入顶点信息到表头
G.ver[i].firstarc=NULL;//指向空
}
for(int k=0;k<G.arcnum;k++)
{
char v1,v2;//这个不要忘记写了!
int w;//这个不要忘记写!!
cin>>v1>>v2>>w;
int i=LocateVex(G,v1),j=LocateVex(G,v2);
if(i
-1||j-1) error=0;
else{//有向网
struct ArcNode *p1=new ArcNode;
p1->adjvex=j;//在i后面插入j边表,头插法
p1->info=w;
p1->nextarc=G.ver[i].firstarc;
G.ver[i].firstarc=p1;
}
}
}
int main()
{
ALGraph G;
int error=1;//int error;初始化为1,否则默认为0,在Create函数中只在出现错误时修改为0,后面会出现错误
Create(G,error);
if(G.vexnum
0||(G.vexnum1&&G.arcnum>1)||error0)cout<<"error";
else{
for(int i=0;i<G.vexnum;++i)
{
cout<<G.ver[i].data;
struct ArcNode *p=G.ver[i].firstarc;
while(p!=NULL){
cout<<"->"<adjvex<<" "<info;
p=p->nextarc;
}
cout<<endl;
}
}
return 0;
}
该程序基于邻接表结构实现带权有向图(有向网)的创建与输出,定义顶点结点、边结点及邻接表的结构体,编写顶点定位函数查找顶点下标,采用头插法构建每个顶点的邻接边链表并存储边的权值;增加输入合法性判断,若顶点数非法、边数不合理或顶点不存在则输出 error,合法则依次遍历每个顶点,输出其邻接的顶点下标与对应权值信息

posted @ 2026-01-09 13:54  C(5,3)  阅读(3)  评论(0)    收藏  举报