我心態崩了,現在來回顧很早之前寫的簡單搜尋,好難啊,我怎麼寫不出來。
我開始把這個寫成了dfs,還寫搓了。。。
慢慢來吧。
這個題目很明顯是乙個很簡單的搜尋題,但是如果用dfs的話很容易出現問題,而且複雜度不低。
所以選擇用bfs。
這個知道用bfs就應該比較簡單了。
就是有三種走的方式,因為k最大為100000 所以我們要限制一下,不然會超時。
#include #includecpoj - 3279#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using
namespace
std;
typedef
long
long
ll;const
int maxn = 5e5 + 100
;int
n, k;
bool
vis[maxn];
intd[maxn];
int t[2] = ;
void bfs(int
x)
for(int i=0;i<=2;i++)
}}int
main()
看到這個題目,我真的心態崩了,這個題目好難啊,結果居然是簡單搜尋,我現在懷疑我這一年來幹了什麼。。。
感覺自己好菜。。。
算了,沒辦法,還是好好刷題吧。
這個題目真的很難。
因為我們每乙個翻轉,都會改變左右的色塊,所以我們每次從下面的那塊來使得上面的那塊翻轉,如果需要的話。
如果知道這一點了就稍微好做那麼一點點了。
所以我們只要列舉第一塊是怎麼翻轉的,這樣子可以直接推出下面的是怎麼翻轉的。
知道這一點了,就很好寫了,不過還是不一定可以寫出**,因為不知道怎麼處理。
然後就看題解學習一下怎麼寫吧。
這個題目我有乙個地方出現bug了,然後一直沒有找到,就是一行有m個數,所以最多有m個1 所以列舉第一行的時候應該是1<
#include #included#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using
namespace
std;
const
int maxn = 1e5 + 10
;int f[30][30], mp[30][30
];const
int dx[5] = ;
const
int dy[5] = ;
int ans[30][30
];int
n, m;
int getnum(int x, int y)//
這個是由初始和翻轉次數來判斷這個面是0還是1
return res % 2;}
intcal() }}
for (int i = 0; i < m; i++)
int res = 0
;
for (int i = 0; i < n; i++)
}return
res;
}void
solve()
int num =cal();
if (num >= 0 && (res < 0 || num
}if (res == -1) printf("
impossible\n");
else}}
}int
main()
}solve();
return0;
}
簡單搜尋題!
設有乙個4 4的棋盤,用四個棋子布到格仔中,要求滿足以下條件 1 任意兩個棋子不在同一行和同一列上 試問有多少種棋局,程式設計把它們全部列印出來。如下 include include include include include using namespace std int n 4,m 4,us...
簡單搜尋 DFS BFS
簡單搜尋 dfs bfs dfs 俗稱爆搜,為深度優先搜尋 bfs 俗稱廣搜,為寬度優先搜尋 假設當前有一棵解答樹 當然一般非標準樹形 dfs借助棧一路下通,直通到最後一層 即已算出乙個可行解 再退一層,看看在這一層還有沒有其他分支,有就繼續扎下去 重複這個過程 so,這就是所謂的 dfs可以解任何...
簡單搜尋 DFS BFS
1 dfs depth first search 深度優先搜尋演算法 是圖與樹搜尋中用到的一種演算法 遍歷的思想是 先從根部進行,一直遍歷到最底部的葉節點,然後再返回到根節點,判斷,如果該根節點上的葉節點都被遍歷過,再返回到根節點,直到遍歷到整棵樹。dfs遍歷循序 我們可以通過棧的思想來進行搜尋,a...