深度优先和广度优先(有源程序)

时间:2012-06-19 16:06:45
【文件属性】:

文件名称:深度优先和广度优先(有源程序)

文件大小:2KB

文件格式:RAR

更新时间:2012-06-19 16:06:45

深度优先和广度优先算法

程序能直接运行,绝对正品程序源代码。 #include #include #include #include int visited[10];/*访问标志数组*/ typedef struct ArcCell{ int adj;/*顶点关系类型,用1表示相邻,0表示不相邻*/ }ArcCell,**AdjMatrix;/*邻接矩阵*/ typedef struct type{ char data[3];/*顶点值*/ struct type *next;/*顶点的下一个指针*/ }VertexType; typedef struct{ VertexType *vexs;/*顶点向量*/ AdjMatrix arcs;/*邻接矩阵*/ int vexnum,arcnum;/*图的顶点数和边数*/ }MGraph; /* ****************************** */ typedef struct QNode{ int elem; struct QNode *next; }QNode,*QueuePtr;/*队数据类型*/ typedef struct { QueuePtr front;/*队头指针*/ QueuePtr rear;/*队尾指针*/ }LinkQueue; int InitQueue(LinkQueue *Q)/*初始化队列*/ { Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/ if(!Q->front) exit(0); (Q->front)->next=NULL; return 1; } int EnQueue(LinkQueue *Q,int e)/*插在队最后*/ {QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/ if(!p) exit(0); p->elem=e;p->next=NULL; (Q->rear)->next=p; Q->rear=p;/*重新设置队尾*/ return 1; } int QueueEmpty(LinkQueue Q)/*队是否为空*/ { if(Q.front==Q.rear) return 1; else return 0;} int DelQueue(LinkQueue *Q,int *e)/*删除队的第一个元素*/ {QueuePtr p; if(QueueEmpty(*Q)) return 0; p=(Q->front)->next; *e=p->elem; (Q->front)->next=p->next; if(Q->rear==p) Q->rear=Q->front; free(p); return 1; } /* ************************ */ void InitGraph(MGraph *G)/*初始图*/ { int i,nu,mu; printf("输入顶点的个数和(边)弧的个数:"); scanf("%d%d",&nu,&mu); G->arcs=(ArcCell **)malloc(nu*sizeof(ArcCell *)); for(i=0;iarcs[i]=(ArcCell *)malloc(nu*sizeof(ArcCell)); G->vexs=(VertexType *)malloc(nu*sizeof(VertexType));/*分配顶点空间*/ G->vexnum=nu;G->arcnum=mu;/*图的顶点数和边数*/ } void InsertGraph(MGraph *G,int i,VertexType e) { if(i<0||i>G->vexnum) return; G->vexs[i].next=e.next; strcpy(G->vexs[i].data,e.data);


【文件预览】:
main
----main.cpp(4KB)

网友评论

  • 不错,很实用
  • 思想值得学习,对初学者来说