06-图1 列出连通集 (25分)
来源:互联网 发布:anywhereanything源码 编辑:程序博客网 时间:2024/05/22 17:20
题目输入:
第一行:给出N个顶点,E条边
以下E行给出每条边的两个端点
题目输出:
分别输出DFS、BFS的结果
代码如下:
#include<stdio.h>#include<stdlib.h>#define MaxVertexNum 10#define true 1#define false 0typedef int Bool;typedef int Vertex;typedef struct GNode *PtrToGNode;struct GNode{ int Nv; int Ne; int G[MaxVertexNum][MaxVertexNum];};typedef PtrToGNode MGraph;typedef struct QNode{ Vertex *Data; int front; int rear;}Queue;Queue *CreateQueue(int);void Enqueue(Queue *,Vertex);int Dequeue(Queue *);Bool TAG=false;Bool Visited[MaxVertexNum];MGraph CreateGraph(int,int);void DFS(MGraph,Vertex);void BFS(MGraph,Vertex,Queue *);void ResetVisit(MGraph,Bool *);int main(){ int N,E; scanf("%d %d",&N,&E); MGraph G=CreateGraph(N,E); int i; for(i=0;i<N;i++) { if(Visited[i]==false) { DFS(G,i); printf("}"); printf("\n"); TAG=false; } } ResetVisit(G,Visited); Queue *PtrQ=CreateQueue(MaxVertexNum); for(i=0;i<N;i++) { if(Visited[i]==false) { BFS(G,i,PtrQ); printf("}"); printf("\n"); TAG=false; } } return 0;}void ResetVisit(MGraph Graph,Bool *Visit){ TAG=false; Vertex V,W; for(V=0;V<Graph->Nv;V++) { Visit[V]=false; }}MGraph CreateGraph(int N,int E){ MGraph Graph; Graph=(MGraph)malloc(sizeof(struct GNode)); Graph->Nv=N; Graph->Ne=E; int i; int n,e; Vertex V,W; for(V=0;V<N;V++) { for(W=0;W<N;W++) { Graph->G[V][W]=0; } Visited[V]=false; } for(i=0;i<E;i++) { scanf("%d %d",&n,&e); Graph->G[n][e]=1; Graph->G[e][n]=1; } return Graph;}void DFS(MGraph Graph,Vertex V){ if(TAG==false) { TAG=true; printf("{ "); } printf("%d ",V); int i; Visited[V]=true; for(i=0;i<Graph->Nv;i++) { if(Graph->G[V][i]!=0&&Visited[i]==false) { DFS(Graph,i); } }}Queue *CreateQueue(int M){ Queue *PtrQ=(Queue *)malloc(sizeof(Queue)); PtrQ->Data=(Vertex *)malloc(M*sizeof(Vertex)); PtrQ->front=PtrQ->rear=-1; return PtrQ;}Bool IsFull(Queue *PtrQ){ Bool full=false; if((PtrQ->rear+1)%MaxVertexNum==PtrQ->front) { full=true; } return full;}Bool IsEmpty(Queue *PtrQ){ Bool empty=false; if(PtrQ->front==PtrQ->rear) { empty=true; } return empty;}void Enqueue(Queue *PtrQ,Vertex V) { if(!IsFull(PtrQ)) { PtrQ->rear=(PtrQ->rear+1)%MaxVertexNum; PtrQ->Data[PtrQ->rear]=V; }}int Dequeue(Queue *PtrQ){ if(!IsEmpty(PtrQ)) { PtrQ->front=(PtrQ->front+1)%MaxVertexNum; return PtrQ->Data[PtrQ->front]; }}void BFS(MGraph Graph,Vertex nv,Queue *PtrQ){ Vertex V,W; if(TAG==false) { TAG=true; printf("{ "); } printf("%d ",nv); Visited[nv]=true; Enqueue(PtrQ,nv); while(!IsEmpty(PtrQ)) { V=Dequeue(PtrQ); for(W=0;W<Graph->Nv;W++) { if(Visited[W]==false&&Graph->G[V][W]!=0) { printf("%d ",W); Visited[W]=true; Enqueue(PtrQ,W); } } }}
0 0
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 06-图1 列出连通集 (25分) C++
- 06-图1 列出连通集 (25分)
- 5-1 列出连通集 (25分)
- 5-1 列出连通集 (25分)
- 06-图1 列出连通集 (25分)
- 正确在遍历中删除List元素
- Chp6 域名系统DNS
- UTF-8编码规则(转)
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- 修改 dokuwiki(适合开发类的最好的wiki) 支持 editor.md(国人做的最好的markdown)编辑
- 06-图1 列出连通集 (25分)
- ubuntu上ssh免登陆
- 删除一个无头单链表的非尾节点
- CodeForces 321A Ciel and Robot
- Android中获取系统通讯录联系人并显示在EditText
- poj1328Radar Installation
- 安卓初识基本控件_AutoCompleteTextView
- WIN10中运行ASP项目出错
- 【白帽子讲web安全】关于XSS,CSRF,SQL注入