2016藍橋 剪郵票

2021-07-30 05:18:16 字數 1588 閱讀 6506

講述來自:感謝作者

剪郵票如【圖1.jpg】, 有12張連在一起的12生肖的郵票。

現在你要從中剪下5張來,要求必須是連著的。

(僅僅連線乙個角不算相連)

比如,【圖2.jpg】,【圖3.jpg】中,粉紅色所示部分就是合格的剪取。

請你計算,一共有多少種不同的剪取方法。

思路:先找到5個數的組合,然後從第乙個數字開始遍歷,經過上下左右操作檢測5個數是否都被訪問一遍,如果5個數都可以遍歷到則種類+1。

在原圖中向上為-4,向下為+4,向左為-1,向右為+1,但是遇到3 4 5 7 8這種4+1=5但是這種情況不符合,所以重構一下原圖:

這樣,向上為-5,向下為+5,向左為-1,向右為+1,避免了每行最後乙個+1後等於下一行第乙個的情況。

作者**:

#include using namespace std;  

int mp[12]= ;

int aa[5],vis[5],sum=0;

int b[4]= ;

void dfs(int n)

} }

int main()

} if(flag==0) continue;

else

sum++;

} cout

int random[5];//存放隨機尋找到的5個數

int visit[5];//是否被訪問到的標記

//每個隨機取出來的數random[i]對應乙個visit[i],表示該數有沒有被遍歷過

int tag[4]=;//向右+1,向左-1,向下+5,向上-5

void dfs(int n) //n代表隨機數的下標random[n],這樣random[i]和visit[i]可以一一對應起來

} }} int main()

visit[0]=1; //從第乙個數出發,這個random[0]這個數已經被遍歷過了 visit[0]=1

dfs(0);//從第乙個數出發,開始找,看看能不能把其餘的 4個數random[1-4]都找到,進入函式dfs

//找完了,不知道五個數是否都能遍歷到,都能遍歷到即visit陣列的元素都是一,當然這種情況就可取

int flag=1;

for(i=0;i<5;i++) //看每乙個random是否都遍歷到了,如果是,就sum++,不是就繼續找下一批 5個隨機數重複過程

}if(!flag)continue;//這情況不行

else}}

}} }

printf("%d\n",sum);

}

2016 藍橋杯 剪郵票 dfs

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

藍橋杯2016初賽 剪郵票

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

藍橋杯 2016省賽 剪郵票

思路 一開始想到dfs套模板來用,可是發現像12346這種無法掃瞄到。從已經剪下來的任乙個點都可以開始dfs。這樣就不會漏掉情況 圖中的123456789101112數字沒有用處。在判斷重複的時候簡單的壓縮一下,2的13次方之內的即可儲存 include include using namespac...