使用邻接表创建无向图
#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;
}