作业帮 > 综合 > 作业

在线急求熟悉图的两种常用的存储结构,邻接矩阵和邻接表.

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 12:55:50
在线急求熟悉图的两种常用的存储结构,邻接矩阵和邻接表.
1.熟悉图的两种常用的存储结构,邻接矩阵和邻接表.
2.建立有向图,用邻接表存储结构存储.
3.在邻接表存储结构上实现深度优先遍历.
用C语言编写,数据结构内容
#include
#include
#define NULL 0
#define maxvernum 100
typedef struct node
{
int adjvex;
struct node *next;
}nodetype;
typedef struct frontnode
{
int data;
struct node *next;
}frontnodetype;
frontnodetype adjlist[maxvernum];
//
void travelgraph(frontnodetype g[],int n)
{
int v;
int c[6];
for(v=1;v
再问: 我要的是深度啊!!!这个错了
再答: #include"stdio.h" #include"stdlib.h" #define MaxVertexNum 50 //定义最大顶点数 #define TRUE 1 #define FALSE 0 typedef struct node//边表结点 { int adjvex; struct node *next; }ArcNode; typedef struct Vertexnode//顶点表结点 { char vertex; ArcNode *firstedge; //边表头指针 }VertexNode; typedef VertexNode AdjList[MaxVertexNum]; //AdjList是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中当前顶点数和边数 } ALGraph; //图类型 //建立图的邻接表 void CreatALGraph(ALGraph *G) { int i,j,k; int a; ArcNode *s; //定义边表结点 printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); //读入顶点数和边数 printf("Input Vertex string:"); for(i=0;in;i++) { scanf("%d",&a); G->adjlist[i].vertex=a; G->adjlist[i].firstedge=NULL; } printf("Input edges,Creat Adjacency List\n"); for(k=0;ke;k++) { scanf("%d,%d",&i,&j); s=(ArcNode *)malloc(sizeof(ArcNode)); s->adjvex=j-1; s->next=G->adjlist[i-1].firstedge; G->adjlist[i-1].firstedge=s; //将新结点*S插入顶点Vi的边表头部 s=(ArcNode *)malloc(sizeof(ArcNode)); s->adjvex=i-1; //邻接点序号为i s->next=G->adjlist[j-1].firstedge; G->adjlist[j-1].firstedge=s; } } int visited[MaxVertexNum]; //DFS:深度优先遍历的递归算法 void DFSM(ALGraph *G,int i) { ArcNode *p; printf("%d",G->adjlist[i].vertex); visited[i]=TRUE; //标记Vi已访问 p=G->adjlist[i].firstedge; while(p!=NULL) { if(! visited[p->adjvex]) DFSM(G,p->adjvex); p=p->next; } } void DFS(ALGraph *G) { int i; for(i=0;in;i++) visited[i]=FALSE; for(i=0;in;i++) if(!visited[i]) DFSM(G,i); } //主函数 void main() { ALGraph *G; G=(ALGraph *)malloc(sizeof(ALGraph)); CreatALGraph(G); printf("Print Graph DFS: "); DFS(G); printf("\n"); }