关于数据结构中图的问题
发布网友
发布时间:2022-04-23 22:54
我来回答
共1个回答
热心网友
时间:2022-04-28 07:50
数据结构书上应该有啊
多看几遍就明白了
关键是把表头结点和结点分开理解
我这有个以前大二自己写的,可能不太好,希望对LZ有帮助
C语言的,包括深度优先搜索
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
char data[10];
ArcNode *firstarc;
}VNode,AdjList[20];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
int kind;
}ALGraph;
void CreateGraph(ALGraph &T,int N,int VR[][20])
{
ArcNode *p,*m;
T.vexnum=N;
for(int i=0;i<N;i++)
{
{
int j=0;
while(VR[i][j]==0&&j!=N) j++;
if(j==N) T.vertices[i].firstarc=NULL;
else
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
T.vertices[i].firstarc=p;
m=p;
j++;
while(j!=N)
{
if(VR[i][j]==1)
{
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
m->nextarc=p;
}
j++;
}
p->nextarc=NULL;
}
}
}
}
int FirstAdjVex(ALGraph L,int v)
{return L.vertices[v].firstarc->adjvex;}
int NextAdjVex(ALGraph L,int v,int w)
{
ArcNode *m;
m=L.vertices[v].firstarc;
while(m->adjvex!=w&&m->nextarc!=0)
{m=m->nextarc;}
if(m->adjvex!=w&&m->nextarc==0)
return -1;
else if(m->nextarc==0)
return 0;
else return m->nextarc->adjvex;
}
void DFS(ALGraph &F,int v)
{
int w;
visited[v]=1;
printf("[%s]->",F.vertices[v].data);
for(w=FirstAdjVex(F,v);w>=0;w=NextAdjVex(F,v,w))
if(!visited[w]) DFS(F,w);
}
void DFSTraverse(ALGraph &F)
{
for(int i=0;i<F.vexnum;i++) visited[i]=0;
for(i=0;i<F.vexnum;i++)
if(!visited[i]) DFS(F,i);
printf("[END]\n");
}
需要JAVA版再联系