主题:再次请教河里的高手,一个图论问题 -- 棒棒糖
用一个2维数组定义所以可能的通路,比如元素paths[i,j]=0表示i节点到j节点不通,而1表示可通,那你所举的例子实现如下
int[,] paths = new int[6,6] { { 0, 1, 1, 1, 1, 1 }, { 0, 0, 1, 1, 1, 1 }, { 0, 0, 0, 1, 1, 1 }, { 0, 1, 1, 0, 1, 1 }, { 0, 0, 1, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0 } };
private ArrayList pathList = new ArrayList();
private ArrayList curPath = new ArrayList();
private void Doit()
{
for (int i = 0; i <= 5; i++)
{
GetPaths(i);
}
}
private void GetPaths(int startNode)
{
curPath.Add(startNode);
if (curPath.Count == 6)
{
pathList.Add(((int)curPath[0] + 1).ToString() + ((int)curPath[1] + 1).ToString() + ((int)curPath[2] + 1).ToString() + ((int)curPath[3] + 1).ToString() + ((int)curPath[4] + 1).ToString() + ((int)curPath[5] + 1).ToString());
curPath.Remove(startNode);
return;
}
for (int j = 0; j <= 5; j++)
{
if ((paths[startNode, j] == 1) && !curPath.Contains(j))
{
GetPaths(j);
}
}
curPath.Remove(startNode);
return;
}
- 相关回复 上下关系8
🙂再次请教河里的高手,一个图论问题 1 棒棒糖 字1001 2007-06-15 00:52:00
🙂一个算法描述: 1 泰让 字476 2007-06-16 08:46:45
🙂如果节点数不多,可否这样做? 1 美人他爹 字459 2007-06-15 12:00:14
🙂用c#实现的
🙂算法效率很重要 1 棒棒糖 字126 2007-06-15 10:59:52
🙂程序没有细看,不知道理解的对否 1 棒棒糖 字251 2007-06-15 10:52:18
🙂照你这意思,可以根据反向回路集来求解 1 小愚 字54 2007-06-15 17:01:08
🙂startnodes 1 小愚 字84 2007-06-15 09:56:26