路徑我有一個無向圖表示由鄰接矩陣。要確定是否有兩個點之間使用C++或C
我需要一個高效率的代碼,該函數只需要返回true或false。
而且我知道Dijkstra's algorithm可以工作,我想我並不需要的最短路徑,而我的鄰接矩陣是:
a[i][j] = 1 or -1
有沒有其他的值。
路徑我有一個無向圖表示由鄰接矩陣。要確定是否有兩個點之間使用C++或C
我需要一個高效率的代碼,該函數只需要返回true或false。
而且我知道Dijkstra's algorithm可以工作,我想我並不需要的最短路徑,而我的鄰接矩陣是:
a[i][j] = 1 or -1
有沒有其他的值。
對不起,我沒有注意到你的矩陣僅包含0和1
如果只查詢一次,也許DFS或BFS是更好的,只有O(|V|+|E|)
如果是雙向路徑,Disjoint-set data structure
(See wikipedia ) 是有效的!
如果只有一個查詢,則所有單源最短路徑算法都可以。像:
O(|V||E|)
O(|V|^2)
Θ((|E|+|V|)log|V|)
如果有很多查詢,請考慮
O(|V|^3)
一個查詢和雙向路徑。 – user1592900 2012-08-12 07:04:45
'DFS'和'BFS'的最壞情況是'O(| E | + | V |)' – 2012-08-13 00:08:31
@DougRamsey謝謝你指出我的錯誤。 – abcdabcd987 2012-08-13 00:48:14
如果你只需要知道兩個點是否連接與否,我認爲http://en.wikipedia.org/wiki/Disjoint-set_data_structure會以最快的速度,你可以做希望有關工作。從它自己的集合中的每個點開始,然後,對於兩個點之間的每個鏈接,加入這些點所屬的兩個集合。
[www.solvemyhomeworkforme.com](http://www.solvemyhomeworkforme.com)更適合。 – dasblinkenlight 2012-08-12 02:35:44
您需要爲此問題添加算法標籤 – 2012-08-12 02:35:48
有可用於您的目的的BFS(寬度優先搜索)和DFS(深度優先搜索)算法。請查看這些。 – PALEN 2012-08-12 02:47:38