n個多公尺諾骨牌,每個骨牌左右兩側分別有乙個0~6的整數(骨牌可以旋轉以調換其左右兩數),求一種把這些骨牌從左到右排列的方案,使得所有相鄰的兩數字相等(即左邊骨牌右側的數字等於右邊骨牌左側的數字)。
把數字當成點,骨牌當做邊。構成無向圖,求一發尤拉道路即可。
無向圖求尤拉路徑還是很好寫的。
尤拉路徑深入講解:
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 200 + 5, maxm = 6 + 5;
struct edge;
int tot = 0;
edge edge[maxn];
stack
s;int pa[maxn], head[maxm], cnt[maxm];
bool vis[maxn];
int _find(int a)
void unite(int a, int b)
bool same(int a, int b)
void add_edge(int u, int v, int id)
void dfs(int u)
}}int main (void)
int be = -1;
int ans = 0;
for(int i = 0; i <= 6; i++)
}if(ans != 0 && ans != 2) return
cout
<<"no solution"
<0;
for(int i = 0; i <= 6; i++)
}dfs(be);
while(!s.empty())
sgu 101 Domino 尤拉路徑 DFS
include include int n,e 11 11 num 11 t 0,flag struct nodec 101 d 101 void dfs int u,int num for int i 0 i 6 i if e u i 0 int main else if c i x d j y ...
SGU101 Domino 尤拉迴路
給定你n張骨牌,每張牌左右兩端有乙個數字,每張牌的左右兩端數字可以顛倒,找出一種擺放骨牌的順序,使得相鄰骨牌的兩端數字相同 最左邊骨牌的最左端和最右邊骨牌的最右端可以不管 最先想到把每個數字縮成點,然後發現這樣連邊都有問題,於是翻了翻各種題解,大概是這樣的 把每個骨牌縮成兩條邊,分別對應正反兩種情況...
sgu 101 Domino 解題報告及測試資料
101.domino time limit per test 0.25 sec.memory limit per test 4096 kb 題解 求多公尺諾骨牌按照一定方式放置能否使相鄰的位置數字相同。其實就是求無向圖的尤拉通路,dfs即可。但需要注意以下幾點 1 注意是否是連通圖。2 注意自環。3...