101. domino
time limit per test: 0.25 sec.
memory limit per test: 4096 kb
題解:
求多公尺諾骨牌按照一定方式放置能否使相鄰的位置數字相同。其實就是求無向圖的尤拉通路,dfs即可。
但需要注意以下幾點:
1、注意是否是連通圖。
2、注意自環。
3、注意有兩個奇度頂點時深搜起點。
以下是**:
#include #include #include using namespace std;
int arr[7][7];
int visited[105];
int path[105][2];
int st,end;
int n,tag;
struct nodenode[105];
int judge();
for(int i=0;i<7;i++)
for(int j=0;j<7;j++)
a[i]+=arr[i][j];
int cnt=0;
for(int i=0;i<7;i++)
if(a[i]%2)
if(cnt==0 || cnt==2)return st; //如果是返回深搜起點
return -1;
}void dfs(int v,int k,int ii){//深度優先搜尋
if(tag==1)return;
visited[v]=1;
char ch = k==1? '+' : '-'; //k為1代表不翻 k為2代表翻轉
int t = k==1?node[v].y : node[v].x;
path[ii][0]=v+1;
path[ii][1]=ch;
if(ii==n-1){ //如果是連通圖 輸出路徑
for(int i=0;i> n){
for(int i=0;i以下是測試資料:
sample input
170 3
1 2
5 1
1 4
2 1
0 2
3 4
3 5
4 3
5 0
3 4
4 0
0 4
4 4
1 4
0 4
3 1
35 2
0 5
3 5
45 2
5 2
5 4
2 5
92 5
2 1
2 1
5 4
5 0
4 1
2 1
3 5
3 4
142 5
4 1
5 4
0 0
3 0
5 4
3 0
3 2
2 4
1 2
5 3
3 1
4 1
2 4
sample output
3 +2 +
5 +4 +
7 -1 -
10 -
8 -9 -
11 -
17 +
15 +
12 +
13 +
14 +
16 -
6 +no solution
3 -1 +
2 -4 -
4 -1 -
2 +3 -
7 +6 -
9 -8 +
5 +5 +
4 +7 -
8 +1 +
3 +2 +
10 +
9 +6 -
11 +
12 +
13 -
14 -
SGU101 Domino 尤拉迴路
給定你n張骨牌,每張牌左右兩端有乙個數字,每張牌的左右兩端數字可以顛倒,找出一種擺放骨牌的順序,使得相鄰骨牌的兩端數字相同 最左邊骨牌的最左端和最右邊骨牌的最右端可以不管 最先想到把每個數字縮成點,然後發現這樣連邊都有問題,於是翻了翻各種題解,大概是這樣的 把每個骨牌縮成兩條邊,分別對應正反兩種情況...
SGU 101 Domino 尤拉路徑
n個多公尺諾骨牌,每個骨牌左右兩側分別有乙個0 6的整數 骨牌可以旋轉以調換其左右兩數 求一種把這些骨牌從左到右排列的方案,使得所有相鄰的兩數字相等 即左邊骨牌右側的數字等於右邊骨牌左側的數字 把數字當成點,骨牌當做邊。構成無向圖,求一發尤拉道路即可。無向圖求尤拉路徑還是很好寫的。尤拉路徑深入講解 ...
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 ...