POJ2570 二進位制,位運算,Floyd

2022-09-05 01:21:09 字數 896 閱讀 8487

題意:

給你乙個有向圖,兩點之間有多種連線方式,然後每次詢問都問你點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即可 二 按...