链表到矩阵.cpp

来自「数据结构中关于图的操作,含多种操作方法例子」· C++ 代码 · 共 86 行

CPP
86
字号
#include"jb.h"

void travgraph(adjlist g,int n);
void btoj(adjlist g,int n);

void main()
{
	adjlist g;
	int e,i,s,d,n;
	struct edgenode *p,*q;
	printf("输入结点数(n)和边数(e):  ");
	scanf("%d%d",&n,&e);
	for(i=1;i<=n;i++)
	{
		getchar();
		printf("第%d个结点信息:",i);
		scanf("%c",&g[i].data1);
		g[i].link=NULL;
	}
	for(i=1;i<=e;i++)
	{
		printf("第%d条边的起点序号,终点序号:",i);
		scanf("%d%d",&s,&d);
		p=(struct edgenode*)malloc(sizeof(struct edgenode));
		q=(struct edgenode*)malloc(sizeof(struct edgenode));
		p->adjvex=d;
		p->info=g[d].data1;
		q->adjvex=s;
		q->info=g[s].data1;
		p->next=g[s].link;			//p插入顶点s是邻接表中
		g[s].link=p;
		q->next=g[d].link;			//q插入顶点d的邻接表中
		g[d].link=q;
	}
	travgraph(g,n);
	btoj(g,n);
}

//遍历邻接表表示的一个图
void travgraph(adjlist g,int n)
{
	int i;
	struct edgenode *p;
	printf("建立的邻接表如下:\n");
	for(i=1;i<=n;i++)
	{
		printf("[%d,%c]=>",i,g[i].data1);
		p=g[i].link;
		while(p!=NULL)
		{
			printf("(%d,%c)-->",p->adjvex,p->info);
			p=p->next;
		}
		printf("\n");
	}
}

void btoj(adjlist g,int n)
{
	adjmax adj;
	struct edgenode *p;
	int i,j,k;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			adj.edges[i][j]=0;
	for(i=1;i<=n;i++)
	{
		adj.vexs[i].data=g[i].data1;	
		for(p=g[i].link;p!=NULL;p=p->next)
		{
			k=p->adjvex;
			adj.edges[i][k]=adj.edges[k][i]=1;
		}
	}
	printf("上述链表转化的矩阵为:\n");
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			printf("%4d",adj.edges[i][j]);
		printf("\n");
	}
}
			


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?