題意:
給你乙個有向圖,兩點之間有多種連線方式,然後每次詢問都問你點a,b之間有哪些方式可以到達,每個小字母是乙個方式.
思路:
很巧妙的位運算和floyd應用,借助floyd的更新過程,去更新任意兩組邊組合起來的長邊,如 map[i][j] 是由 map[i][k] 和 map[k]][j]接起來的,更新方式很容易理解,是map[i][j] = map[i][j] | (map[i][k] & map[k][j]),每條邊的狀態都轉化成2進製就行了。
#include
#include
int map[
205][
205];
intpow
(int n)
intmain
()for
(k =
1;k <= n ;k ++)
for(i =
1;i <= n ;i ++)
for(j =
1;j <= n ;j ++)
map[i][j]
= map[i][j]
|(map[i][k]
& map[k][j]);
while
(scanf
("%d %d"
,&a ,&b)
&& a + b)}if
(!mk)
printf
("-"
);printf("
\n");}
printf("
\n");}
return0;
}
poj 2570經典二進位制floyd
floyd 位運算 題目大意 有若干家公司,他們分別在若干個城市的路由器間鋪設了自己的光纖,現在問,如果要從路由器a到路由器b傳送資料,能否只使用一家公司的光纖而達到目的,如能則分別輸出這些公司的代號。思路 雖然不是最短路,卻可以用每對頂點的最短路徑 floyd warshell 演算法來求解。di...
二進位制位運算
與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...
二進位制位運算
一 按位與 位全為1,結果才為1 0 0 0 0 1 0 1 0 0 1 1 1 特殊用法 清零。如果想將乙個單元清零,就是使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零 取乙個數中的指定位。如x 10101110要取x的低4位,用x 00001111 00001110即可 二 按...