挑战程序设计竞赛:深度优先搜索

xiaoxiao2021-02-28  71

1:判断n个元素集合a中是否存在若干个数和为k?

样例输入:n=3 a={1,2,4,7} k=10样例输出:YES因为存在 1+2+7=10 #include<bits/stdc++.h> using namespace std; const int MAX_N = 10; int a[MAX_N]={1, 2, 4, 7}; int n, k; void input() { n = 3; // a = {1, 2, 4, 7}; k = 15; } bool dfs(int i, int sum) { if (i == n)return sum == k; if (dfs(i + 1, sum))return true; if (dfs(i + 1, sum + a[i]))return true; return false; } int main() { if (dfs(0, 0))printf("Yes\n"); else printf("No\n"); return 0; }

2 AOJ1580

#include<bits/stdc++.h> using namespace std; const int MAX_N = 20; int a[MAX_N]; int n, k; bool dfs(int i, int sum) { if (i == n)return sum == k; if (dfs(i + 1, sum))return true; if (dfs(i + 1, sum + a[i]))return true; return false; } int main() { while (~scanf("%d", &n)) { int tot = 0; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); tot += a[i]; } if (tot % 2 == 0) { k = tot / 2; if (dfs(0, 0)) printf("Of course,I can!\n"); else printf("Sorry,I can't!\n"); } else printf("Sorry,I can't!\n"); } return 0; }

3. 统计水洼POJ2386

Sample Input 10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W. Sample Output 3 #include<stdio.h> const int MAX_N = 100; const int MAX_M = 100; int N, M; char field[MAX_N][MAX_M + 1]; void dfs(int x, int y) { field[x][y] = '.'; for (int dx = -1; dx <= 1; dx++) for (int dy = -1; dy <= 1; dy++) { int nx = x + dx; int ny = y + dy; if (nx >= 0 && nx < N && 0 <= y && ny < M && field[nx][ny] == 'W')dfs(nx, ny); } } void solve() { int res = 0; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) { if (field[i][j] == 'W') { dfs(i, j); ++res; } } printf("%d\n", res); } int main() { while(~scanf("%d%d", &N, &M)) { for (int i = 0; i < N; i++) scanf("%s", field[i]); solve(); } return 0; }

赵老师《面向AOJ的python编程直播》

[斗鱼链接]https://www.douyu.com/2197341?_r=0.1352293670643121 直播及辅导群【安科ACM官方群】391668336 GIT 代码网址:https://git.ahstu.cc/zj/zjPy
转载请注明原文地址: https://www.6miu.com/read-79254.html

最新回复(0)