使用邻接表建立有向图与无向图

使用邻接表创建无向图

#include<bits/stdc++.h>
using namespace std;
typedef struct biao{
	int bianhao;
	int weight;
	struct biao* next;
}biao; 
typedef struct tou{
	char a;
	biao* next;
}tou;
typedef struct Graph{
	
	tou b[20];
	int vex,edge;
}Graph;
int Locate(Graph &p,char a);
void Creat(Graph &p);
void dayin(Graph &p);
int Locate(Graph &p,char a){
	int b=p.vex;
	int c;
	for(c=0;c<b;c++){
		if(p.b[c].a==a){
			return c;
		}
	}
	return -1;
}

void Creat(Graph &p){
	FILE* fp;
	fp=fopen("邻接表建有向图.txt","r");
	fscanf(fp,"%d %d ",&p.vex,&p.edge);
	int a;
	for(a=0;a<p.vex;a++){
		fscanf(fp,"%c ",&p.b[a].a);
	}
	for(a=0;a<p.vex;a++){
		p.b[a].next=NULL;
	}
	for(a=0;a<p.edge;a++){
		char u,v;
		fscanf(fp,"%c %c ",&u,&v);
		int u1=Locate(p,u);
		if(u1==-1){
			printf("Error\n");
			return;
		}
		int v1=Locate(p,v);
		if(v1==-1){
			printf("Error\n");
			return;
		}
		biao* m=(biao*)malloc(sizeof(biao));
		m->next=NULL;
		m->bianhao=v1;
		if(p.b[u1].next==NULL){
			p.b[u1].next=m;
		}
		else{
			biao* n=p.b[u1].next;
			while(n->next!=NULL){
				n=n->next;
			}
			n->next=m;
		}//------------------------------------------
		biao* m2=(biao*)malloc(sizeof(biao));
		m2->next=NULL;
		m2->bianhao=u1;
		if(p.b[v1].next==NULL){
			p.b[v1].next=m2;
		}
		else{
			biao* n2=p.b[v1].next;
			while(n2->next!=NULL){
				n2=n2->next;
			}
			n2->next=m2;
		}
		//-------------------------------
	}
}
void dayin(Graph &p){
	int a=p.vex;
	int b;
	for(b=0;b<a;b++){
		printf("%c: ",p.b[b].a);
		biao* m=p.b[b].next;
		while(m!=NULL){
			printf("%c->",p.b[m->bianhao].a);
			m=m->next;
		}
		printf("\n");
	}
}
void xieru(Graph &p){
	FILE* fp;
	fp=fopen("answer.txt","w");
	int a=p.vex;
	int b;
	for(b=0;b<a;b++){
		fprintf(fp,"%c: ",p.b[b].a);
		biao* m=p.b[b].next;
		while(m!=NULL){
			fprintf(fp,"%c->",p.b[m->bianhao].a);//此处打印的是编号,可以改成节点p.b[m->bianhao].a 
			m=m->next;
		}
		fprintf(fp,"\n");
	}
}
int main(){
	Graph p;
	Creat(p);
	dayin(p);
	xieru(p);
	return 0;
}

使用邻接表创建有向图

#include<bits/stdc++.h>
using namespace std;
typedef struct biao{
	int bianhao;
	int weight;
	struct biao* next;
}biao; 
typedef struct tou{
	char a;
	biao* next;
}tou;
typedef struct Graph{
	
	tou b[20];
	int vex,edge;
}Graph;
int Locate(Graph &p,char a);
void Creat(Graph &p);
void dayin(Graph &p);
int Locate(Graph &p,char a){
	int b=p.vex;
	int c;
	for(c=0;c<b;c++){
		if(p.b[c].a==a){
			return c;
		}
	}
	return -1;
}

void Creat(Graph &p){
	FILE* fp;
	fp=fopen("邻接表建有向图.txt","r");
	fscanf(fp,"%d %d ",&p.vex,&p.edge);
	int a;
	for(a=0;a<p.vex;a++){
		fscanf(fp,"%c ",&p.b[a].a);
	}
	for(a=0;a<p.vex;a++){
		p.b[a].next=NULL;
	}
	for(a=0;a<p.edge;a++){
		char u,v;
		fscanf(fp,"%c %c ",&u,&v);
		int u1=Locate(p,u);
		if(u1==-1){
			printf("Error\n");
			return;
		}
		int v1=Locate(p,v);
		if(v1==-1){
			printf("Error\n");
			return;
		}
		biao* m=(biao*)malloc(sizeof(biao));
		m->next=NULL;
		m->bianhao=v1;
		if(p.b[u1].next==NULL){
			p.b[u1].next=m;
		}
		else{
			biao* n=p.b[u1].next;
			while(n->next!=NULL){
				n=n->next;
			}
			n->next=m;
		}
	}
}
void dayin(Graph &p){
	int a=p.vex;
	int b;
	for(b=0;b<a;b++){
		printf("%c: ",p.b[b].a);
		biao* m=p.b[b].next;
		while(m!=NULL){
			printf("%c->",p.b[m->bianhao].a);
			m=m->next;
		}
		printf("\n");
	}
}
void xieru(Graph &p){
	FILE* fp;
	fp=fopen("answer.txt","w");
	int a=p.vex;
	int b;
	for(b=0;b<a;b++){
		fprintf(fp,"%c: ",p.b[b].a);
		biao* m=p.b[b].next;
		while(m!=NULL){
			fprintf(fp,"%c->",p.b[m->bianhao].a);//此处打印的是编号,可以改成节点p.b[m->bianhao].a 
			m=m->next;
		}
		fprintf(fp,"\n");
	}
}
int main(){
	Graph p;
	Creat(p);
	dayin(p);
	xieru(p);
	return 0;
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值