关于图的问题,急救啊!!!!
对有向图和无向图分别实现下列要求:
1)以邻接表存储图的信息;
2)使用递归和非递归算法的实现图的DFS(深度遍历);
3)使用递归和非递归算法的实现图的BFS(广度遍历);
4)求图的连通分量个数
5)判断该图是否是连通的。
[解决办法]
这些问题好像可以从一些教材上面找到,这里写好像比较麻烦,楼主去看一下教材吧,会有帮助的
[解决办法]
这些不是一两句话就说得清楚的,你还是拿本数据结构的书看看吧,一般的书都会有这些的,解释得要比我们这些人好啊
[解决办法]
几乎每本数据结构书上都有啊
[解决办法]
typedef struct Node
{
int data ; //记录节点名称
int length; //节点相隔距离
struct Node *next ;
}Node;
typedef struct Graph
{
char ch ; //记录图节点的名称
bool Asked; //记录节点是否被访问过;
Node *next;
}Graph;
void BianLiGraph( Graph GH[],int num ) //GH为邻接表的数组,num为图节点的个数
{
Node *temp = GH[0]-> next ;
Node* Stack[num+1] ;
int top = 0 ;
Stack[0]=NULL; //把堆栈底部设为NULL,作为循环结束标识,相当于判断top==0 ;
Stack[++top] = temp ;//在每次循环访问前,都要把节点先存在堆栈中
GH[0].Asked = true ; //把访问过的节点标为TRUE
while(temp)
{
if(GH[temp-> data].Asked) //如果节点已经被访问
{
temp = temp-> next ;
if(temp) //这里一个出栈和一个进栈操作,合起来就是这样
Stack[top]=temp;
else
temp = Stack[--top];
}
else //节点还没有被访问
{
GH[temp-> data].Asked = true ;
temp = GH[temp-> data]-> next ;
if(temp)
Stack[++top] = temp ;
else
temp = Stack[--top];
}
}
}
bool GraphIsConnected( Graph GH[] , int num )
{
for(int i=0 ; i <num ;i++)
{
if(!Graph[i].Asked)
break ;
}
if(i <num)
return false ;
else
return true ;
}
判断一个无向图是否连通,采用邻接表存储,程序没有调过
具体算法就是这样,看看对你有启发没?