图的算法问题——输出图中的环
来源:互联网 发布:java和javaweb哪个好 编辑:程序博客网 时间:2024/05/20 10:20
Using DFS to solvethe following problems:
(1) given a graph G, test if G is connected.
(2) given a graph G, test if G has a cycle,ifso,print a cycle
#include <iostream>#include <fstream>#include <string>#include <cstdlib>#define MAXSIZE 20#define MAX_QUEUE_SIZE 10using namespace std;int Map[MAXSIZE][MAXSIZE];int largest=0;int visited[MAXSIZE];//The function of reading a graph.void ReadGraph(){ ifstream fin("graph.txt"); const int LINE_LENGTH = 100; char str[LINE_LENGTH]; while( fin.getline(str,LINE_LENGTH) ) { int i,j,k; i=(int)(str[0]-'0'); j=(int)(str[2]-'0'); Map[i][j]=1; Map[j][i]=1; k=(i>=j)?i:j; largest=(largest>=k)?largest:k; }}//The function of Printing.void PrintGraph(){ cout<<"The printing of the graph."<<endl; for(int i=1;i<=largest;i++) { cout<<i<<"---"; for(int j=1;j<=largest;j++) { if(Map[i][j]) cout<<j<<","; } cout<<endl; }}//The function DFS.void DFS(int v){ cout<<v<<"->"; visited[v]=1; for(int j=1;j<=largest;j++) if(Map[v][j]&&!visited[j]) DFS(j); }//The function to output the circle of a graph.void PrintCycle(){ int Queue[MAX_QUEUE_SIZE]; //Define a Queue which expressed in array. int next; //The next node. int front=0; int rear=0; //Definition of front and rear int number=0; for(int i=1;i<=largest;i++) { for(int j=1;j<=largest;j++) { if(Map[i][j]) number++; } if(number<=1) { for(int j=1;j<=largest;j++) { Map[i][j]=0; Map[j][i]=0; } } else { Queue[rear]=i; rear=(rear+1)%MAX_QUEUE_SIZE; } number=0; } while(front!=rear) { int next; next=Queue[front]; front=(front+1)%MAX_QUEUE_SIZE; for(int j=1;j<=largest;j++) { if(Map[next][j]) number++; } if(number<=1) { for(int j=1;j<=largest;j++) { Map[next][j]=0; Map[j][next]=0; } } } cout<<"The Cycle is :"<<endl; rear=front=0; for(int i=1;i<=largest;i++) { number=0; for(int j=1;j<=largest;j++) { if(Map[i][j]) number++; } if(number) { Queue[rear]=i; rear=(rear+1)%MAX_QUEUE_SIZE; } } if(rear==0) cout<<"The graph has no Cycle."; else while((front!=rear)&&(visited[front]==0)) { int first; first=Queue[front]; DFS(Queue[front]); front=(front+1)%MAX_QUEUE_SIZE; cout<<first; }}int main(){ ReadGraph(); PrintGraph(); PrintCycle(); system("PAUSE"); return 0;}
- 图的算法问题——输出图中的环
- 算法问题——输出1-100之间的素数
- 从零开始—java中的多值输出问题
- 依次输出链表中的各个结点的递归算法
- 一个将字符串中的单词倒序输出的算法
- 算法系列—— 输出所有的笛卡尔积组合
- 图的算法问题——判断图是否连接
- java的输出在命令行中的重定向问题
- C语言中的一个关于基本类型的输出问题
- 实际问题的算法抽象——动态规划中的01背包问题
- 薪金问题中的四舍五入算法的实现
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- 前端面试中的常见的算法问题
- VS2010中“转到定义”提示“未能找到符号”的解决方法
- spring aop 性能监控器
- 图
- UATR与RS232以及COM端口的关系
- java socket编程
- 图的算法问题——输出图中的环
- Android 开发之使用Eclipse Debug调试详解
- java socket读入未知大小inputstream的客户端
- 猴子吃桃问题
- 参加的活动---百度开放云·创客马拉松:跟手机联动的数字灯泡
- poj 1679 The Unique MST(次小生成树)
- 计算机网络协议模拟程序——滑动窗口协议
- 帮妹子修电脑最装逼的命令
- 经典算法——Huffuman树(Huffman编码)