ACM日記之列舉法 DFS

2021-08-17 19:43:37 字數 2188 閱讀 1557

今天刷了兩個拖了好幾天的題,寫完發現好簡單,網路上有好幾種方法,列舉,bfs...我只會暴力列舉+bfs(最簡單的)(/ □ \)。

hdu 1753flip game

題目的大概意思就是給乙個棋盤,例如

bwbw 

bwww 

wwwb 

wwwb     (b指black,w指white五五開)

可以翻轉乙個棋子,而且棋子的周圍(上下左右)都會翻轉,問至少翻轉多少次可以將棋盤變成純色(純黑或者純白)

思路:因為每個棋子翻轉0次和翻轉2次,即翻轉偶數次是一樣的結果。奇數同理。

棋盤為4✖4,所以有16個棋子,我們可以列舉只翻轉棋子的數目0~16.

一共會列舉

**如下:

#include#include using namespace std;

#includeint chess[16+5][16+5];

bool flag=0;

int step; //列舉步數,從0~16步

int rf[5]=; //上,右,下,左,自身 行

int cf[5] = ;//上,右,下,左,自身 列

bool isover()

void fz(int r,int c)

}void bfs(int r,int c,int deep)

if(flag || r==5) //flag==1已經完成,row==5已經出棋盤

fz(r,c); //翻轉

if(c<4)

else

fz(r,c); //假如第乙個不翻轉,就將第乙個翻轉回原樣

if(c<4)

else

return; }

int main()

getchar();

} for(int i=0;i<=16;i++)

if(flag)

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

else

printf("impossible\n");

return 0;

}

hdu  2965

這題和上面的翻轉棋子類似,只是翻轉冰箱的門把手,一共16個門把手,也是可以翻轉一次,但是這次如果翻轉第i行,第j列的門把手,整個行和整個列的門把手都會被翻轉。只不過這次不僅要輸出最小步數,還要輸出每步翻轉的地方是那裡。

思路:我們可以類似上面的方法列舉看,只要在改變判flag 的條件,然後在翻轉的時候用乙個陣列記錄一下i,j行列就好了。**和上面很像。

**如下:

#include#include#define maxn 1000000

int door[4+5][4+5];

bool flag=false;

int num=0,step=0; //num用於記錄開關的過程,兩個為乙個位置 ,step用於列舉步數

int s[maxn]; //記錄開關門的過程

bool isover()

return true;

} void fz(int r,int c,int x) //r是行,c是列

door[r][c]=!door[r][c];

}void dfs(int r,int c,int deep)

if(flag||r>=5)

fz(r,c,deep);

if(c<4)

dfs(r,c+1,deep+1);

else

dfs(r+1,1,deep+1);

fz(r,c,deep);

if(c<4)

dfs(r,c+1,deep);

else

dfs(r+1,1,deep);

return ;

}int main()

getchar();

} /*for(int i=1;i<=4;i++)

printf("\n");

}*/for(int i=0;i<=16;i++)

if(flag)

}else

printf("impossible\n");

return 0;

}

emmm藍橋杯,校賽,省賽在即,希望自己能加油多刷一點題!

列舉法 acm辦公室的故事

都知道實驗室裡小袁,小劉,小邊是非常非常好的好朋友,最近這三個人在實驗室感覺非常的無聊,於是小袁想出了乙個點子來測試一下他們的默契程度,他讓小劉,小邊,還有他自己都拿乙個矩形的木板,如果這三個木板能拼成乙個正方形,代表著他們很有默契,如果不能,那麼就沒有默契。小袁很愁,因為這個問題已經難道他們三個了...

程式設計演算法之列舉法

列舉法是程式設計裡常用的演算法之一,依賴於計算機的強大計算能力來窮盡沒一種可能的情況,從而達到解決問題的目的,改演算法效率並不高,但適用於一些沒有明顯規律可循的環境。在小學奧數中經常會看到一些填數字的遊戲,如下圖 演算法描述題 算 題題題題題題 從上圖可看出,共有5個漢字 算,法,描,述,題 每個漢...

學習日記 列舉

知識點 列舉 列舉自定義屬性 位標誌 效果圖 提要 1.類標記 flags 2.定義特性 setarrtibute 北京 五一 descriptionattribute 北京 flags public enum enumstate 定義列舉 1.轉為陣列並獲取 getcustomattributes...