namespace Graph
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
public class Graph
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int[,] v;
int num;
public Graph(int n)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
num = n;
v=new int[n,n];
for (int i = 0; i < n; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int j = 0; j < n; j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
v[i, j] = int.MinValue;
if (i==j)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
v[i, j] = -1;
}
}
}
}
public void CreateGraph(int a,int b,int weight)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
v[a, b] = weight;
v[b, a] = weight;
}
public int FirstN(int v1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int i = 0; i < num; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (v[v1,i]>=0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return i;
}
}
return -1;
}
public int NextN(int v1, int w)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int i = w + 1; i < num; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (v[v1,i]>=0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return i;
}
}
return -1;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 边数目
/// </summary>
public int EdgeNum
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int result = 0;
for (int i = 0; i < num; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int j = i+1; j < num; j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (v[i, j] >= 0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
result++;
}
}
}
return result;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
public void DFS()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//define a visit array.
//use it to remember the visited Vertux
int[] visited = new int[num];
for (int i = 0; i < num; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
visited[i] = 0;
}
DFS(0, visited);
![](/Images/OutliningIndicators/InBlock.gif)
}
void DFS(int v, int[] visited)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Console.Write("{0} ", v);
visited[v] = 1;
int w = FirstN(v);
while (w != -1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (visited[w]==0)
DFS(w, visited);
w = NextN(v, w);
}
}
public void BFS()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
v = q.Dequeue();
int w = FirstN(v);
while (w!=-1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (visited[w]==0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Console.Write("{0} ", w);
visited[w] = 1;
q.Enqueue(w);
}
w = NextN(v, w);
}
}
}
}
}
posted @
2008-01-12 11:04
zeus2
Views(
667)
Comments()
Edit
收藏
举报