代码还要自己敲呢,越敲越熟练,自己也就慢慢有感觉了,反正有时候的那感觉真的好难受啊,那种感觉就是高三后半期的感觉,颓废的不能再颓废了,糜烂的不能再糜烂,什么事情都不要敷衍了,什么事要做就做好,不做就不做,要做就从现在开始做,不要在一拖再拖了,,,,,,,
这个代码还在舍友的帮助下敲出来的,不会了就问吧,代码:
#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; }