好久都沒有寫過搜尋題了,典型的dfs,之前也做過專題訓練,寫起來也挺順手的,今日一練,還是發現了一點小小的疏忽
a.lake counting
思路:這就是一道典型的搜尋題,就是多了個斜對角的情況,除此之外沒有任何坑點和卡點,可以考慮直接用dfs來解決。題中也明確說明了每個區域可以有八個相鄰的方向,直接遍歷搜尋即可,注意一下邊界。
然而,心血來潮,考慮到邊的對稱性,因此將問題簡化為只考慮其中的四條邊,然而事實證明這種簡化過程是錯誤的,會篩掉u字形區域,可見每次簡化都需要經過深思熟慮,一點小小疏忽都會導致錯誤
/*
author:owen_q
*/#include using namespace std;
bool p[110][110];
int n,m;
void dfs(int x,int y)
if(p[x-1][y])
if(y+1=0&&p[x][y-1])
if(y+1=0&&p[x+1][y-1])
if(p[x+1][y])
if(y+1}
return ;
}int main()
else}}
int sum = 0;
for(int i=0;icout<}
cout << endl;*/}}
}printf("%d\n",sum);
}return 0;
}
POJ1010 搜尋題基礎
雖然也認同這題是基礎的搜尋題,但因做題太不熟練,寫了好久 include include include using namespace std const int n 4 const int nn 1000 int n,types,sum,maxz,a nn hash nn p n s n boo...
poj 2976 基礎01分數規劃
這個題算是01分數規劃的最基本的應用了,01分數規劃是給你n對數 a1,b1 an,bn 然後讓你選擇一些數對,使得sigma ai sigma bi 最大。這裡附上講解乙份,如下 include include include include include using namespace std...
最基礎的窮竭搜尋(2)
特殊狀態的列舉 雖然生成可行空間多數採用深度優先搜尋,但在裝態空間比較特殊時其實可以簡短的實現。比如,c 標準庫中提供了next permutation函式,它可以把n個元素共n 中不同的排列組合生成出來。又或者,通過使用位運算子,可以列舉出從n個元素中取出k個的所有情況,或某個集合的所有子集。in...