namespace Graph


{
public class Graph

{
int[,] v;
int num;
public Graph(int n)

{
num = n;
v=new int[n,n];
for (int i = 0; i < n; i++)

{
for (int j = 0; j < n; j++)

{
v[i, j] = int.MinValue;
if (i==j)

{
v[i, j] = -1;
}
}
}
}
public void CreateGraph(int a,int b,int weight)

{
v[a, b] = weight;
v[b, a] = weight;
}
public int FirstN(int v1)

{
for (int i = 0; i < num; i++)

{
if (v[v1,i]>=0)

{
return i;
}
}
return -1;
}
public int NextN(int v1, int w)

{
for (int i = w + 1; i < num; i++)

{
if (v[v1,i]>=0)

{
return i;
}
}
return -1;
}

/**//// <summary>
/// 边数目
/// </summary>
public int EdgeNum

{
get

{
int result = 0;
for (int i = 0; i < num; i++)

{
for (int j = i+1; j < num; j++)

{
if (v[i, j] >= 0)

{
result++;
}
}
}
return result;
}
}

public void DFS()

{
//define a visit array.
//use it to remember the visited Vertux
int[] visited = new int[num];
for (int i = 0; i < num; i++)

{
visited[i] = 0;
}
DFS(0, visited);

}
void DFS(int v, int[] visited)

{
Console.Write("{0} ", v);
visited[v] = 1;
int w = FirstN(v);
while (w != -1)

{
if (visited[w]==0)
DFS(w, visited);
w = NextN(v, w);
}
}
public void BFS()

{
Queue<int> q = new Queue<int>();
int[] visited = new int[num];
for (int i = 0; i < num; i++) visited[i] = 0;
int v = 0;
Console.Write("{0} ", v);
visited[v] = 1;
q.Enqueue(v);
while (q.Count!=0)

{
v = q.Dequeue();
int w = FirstN(v);
while (w!=-1)

{
if (visited[w]==0)

{
Console.Write("{0} ", w);
visited[w] = 1;
q.Enqueue(w);
}
w = NextN(v, w);
}
}
}
}
}
posted on 2008-01-12 11:04
zeus2 阅读(210)
评论(0) 编辑 收藏 网摘