図の構造の深さは優先的に遍歴され、広さは優先的に遍歴されている.
1574 ワード
前言
本論文で議論したのは簡単な図構造で、頂点からその辺までは存在せず、同じ側波比が重複して現れる.
データ構造の定義
考え方アクセス頂点root は、頂点rootにアクセスされていない隣接点から頂点vを選択し、vから再び深さ優先 を巡回する.は、図中のすべてのrootパスに共通する頂点が にアクセスされるまで、上記の2つのステップを繰り返す.
コア方法:再帰
コード
考え方はある頂点rootから出発して、root にアクセスします.は、rootの各未訪問の隣接点a,b,c,d,e,f,g… を順次訪問する.は、a,b,c,d,e,f,g.からそれぞれ、それらがアクセスされていない隣接点に順次アクセスし、先にアクセスされた頂点の隣接点を、後に頂点にアクセスされる隣接点より先にする.図中のすべての頂点が を巡回するまで.
コア方法:サイクル
コード
本論文で議論したのは簡単な図構造で、頂点からその辺までは存在せず、同じ側波比が重複して現れる.
データ構造の定義
//
class ArcNode
{
public int adjvex; //
public ArcNode next;
}
//
class VertexNode
{
public T vertex;
public ArcNode firstedge;
}
深さ優先巡回考え方
コア方法:再帰
コード
public void DFSTraverse(int v)
{
ArcNode p = null;
int j;
Console.WriteLine(adjlist[v].vertex); //
visited[v] = 1; //
p = adjlist[v].firstedge; // p v
// v j
while (p != null)
{
j = p.adjvex;
if (visited[j] == 0) //
DFSTraverse(j);
p = p.next;
}
}
広さ優先巡回、考え方
コア方法:サイクル
コード
public void BFSTraverse(int v)
{
// ,
int[] Q = new int[Program.MaxSize];
int front = -1, rear = 1; //
ArcNode p = null;
Console.WriteLine(adjlist[v].vertex);
//
visited[v] = 1;
Q[++rear] = v;
//
while (front != rear)
{
v = Q[++front];
p = adjlist[v].firstedge; // p v
while (p != null)
{
int j = p.adjvex; //j v
if (visited[j] == 0)
{
Console.WriteLine(adjlist[j].vertex);
visited[j] = 1;
Q[++rear] = j;
}
p = p.next;
}
}
}