藍橋杯2016初賽 剪郵票 DFS

2022-02-15 14:12:48 字數 1211 閱讀 1985

如下圖, 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。(僅僅連線乙個角不算相連)。

求多少種剪法。

間接相當於求路徑/條數/方法數等,所以我們可以很容易的想到利用 dfs 來做。

但是我沒有考慮到的是,該題的圖三(下圖):

這種走法(t型呀、π型呀等),dfs是走不到的,dfs最直觀的就是一條路走到頭,所以可以說,dfs不會拐彎,所以題目給定的第三幅圖其實直接用一般的dfs模板我

們解出來會比正確答案少,好像解出來是八十幾來著,但是正確的答案是116。

所以這題就是dfs變形,因為得另外開乙個陣列去記錄路徑,網上有好多方法,我參考的是直接通過二進位制位移,就是每次dfs的時候如果發現滿足條件5的就把整個圖都遍歷一下,把book為真的直接 x<<=1 就行(這裡優先順序《大!?)

ps:藍橋杯都變形了嗎……

#includeusing namespace std;

typedef long long ll;

#define inf 0x3f3f3f3f

int a[5][5],ans;

bool book[5][5],book1[100010];

int to[4][2]= ,,,};

void dfs(int cnt)

}if(!book1[w])

return;

}// for(int i=0; i<4; i++) //不知道直接 *k是否可以?

// //這裡寫的不是遍歷方向,方向放在兩個for裡面寫

for(int i=1; i<=3; i++)}}

}}}int main()

}cout

typedef long long ll;

#define inf 0x3f3f3f3f

int a[5][5],cnt,ans;

bool book[5][5];

int to[4][2]= ,,,};

void dfs(int x,int y,int ss)}}

}int main()

for(int i=1; i<=3; i++)

}cout<

return 0;

}

藍橋杯2016初賽 剪郵票

題目描述 如下圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,下面兩張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。輸出請填寫表示方案數目的整數。思想 一看資料量應該就知道是乙個簡單的 dfs 或者 bfs 的...

2016 藍橋杯 剪郵票 dfs

這是2016年藍橋杯c語言省賽b組的第七題 題目 如下圖,有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,下面兩張圖中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。輸出 請填寫表示方案數目的整數。oj鏈結 思路 通過對...

DFS 藍橋杯試題 剪郵票

填空題 如 圖1.jpg 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,圖2.jpg 圖3.jpg 中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何...