代码还要自己敲呢,越敲越熟练,自己也就慢慢有感觉了,反正有时候的那感觉真的好难受啊,那种感觉就是高三后半期的感觉,颓废的不能再颓废了,糜烂的不能再糜烂,什么事情都不要敷衍了,什么事要做就做好,不做就不做,要做就从现在开始做,不要在一拖再拖了,,,,,,,
这个代码还在舍友的帮助下敲出来的,不会了就问吧,代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 10
#define max 32678
int visited[n]={0}; //定义全局变量
typedef struct{
char vertex[n];
int array[n][n];
int numVertex,numEdge;
}adjMatrix;
typedef struct {
int top;
int data[n];
}stack;
void visit(adjMatrix ,int );
int NextAdjVertex(adjMatrix G,int vo,int w);
int NextAdjVertex(adjMatrix G,int vo,int w);
void initstack(stack **s)
{
*s=(stack *)malloc(sizeof(stack));
memset(*s,0,sizeof(**s));
(*s)->top=-1;
}
void push(stack *s,int v)
{
s->top++;
s->data[s->top]=v;
}
int empty(stack *s)
{
if(s->top==-1)
return 0;
else
return 1;
}
int pop(stack *s,int *v)
{
if(!empty(s))
return 0;
else
{
*v=s->data[s->top];
s->top--;
return 1;
}
}
void visit(adjMatrix G,int vo)
{
printf("%c ",G.vertex[vo]);
}
int FirstAdjvertex(adjMatrix G,int vo)
{
int j;
for(j=0;j<G.numVertex;j++)
if(G.array[vo][j]<max)
return j;
return -1;
}
int NextAdjVertex(adjMatrix G,int vo,int w)
{
int j;
for(j=w+1;j<G.numVertex;j++)
if(G.array[vo][j]<max)
return j;
return -1;
}
void CreateadjMatrix(adjMatrix *G){
int i,j;
int vn,vm,weight;
printf("请你输入顶点的个数和边数: ");
scanf("%d%d",&G->numVertex,&G->numEdge);
for(i=0;i<G->numVertex;i++)
for(j=0;j<G->numVertex;j++)
G->array[i][j]=max;
for(i=0;i<G->numVertex;i++)
{
getchar();
printf("\n请你输入%d个顶点信息: ",i+1);
scanf("%c",&G->vertex[i]);
}
for(i=0;i<G->numEdge;i++)
{
printf("请你输入Vi到Vj的顶点信息和权值 vn,vm,weight :");
scanf("%d%d%d",&vn,&vm,&weight);
G->array[vn][vm]=weight;
G->array[vm][vn]=weight;
}
}
void DFS(adjMatrix G,int vo)
{
int v,w;
stack *s;
initstack(&s);
push(s,vo);
while(empty(s))
{
pop(s,&v);
if(!visited[v])
{
visit(G,v);
visited[v]=1;
}
w=FirstAdjvertex(G,v);
while(w!=-1)
{
if(!visited[w])
push(s,w);
w=NextAdjVertex(G,v,w);
}
}
}
void TravelG(adjMatrix G)
{
int v;
for(v=0;v<G.numVertex;v++)
if(!visited[v])
DFS(G,v);
printf("\n");
}
int main()
{
adjMatrix G;
CreateadjMatrix(&G);
TravelG(G);
return 0;
}