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 10
using 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;
}