sgu 101 Domino 解題報告及測試資料

2022-05-02 15:27:12 字數 2071 閱讀 6635

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 ...