diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257/7\346\256\265\347\240\201/solution.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257/7\346\256\265\347\240\201/solution.md" index 5167de7f708ec4ab09c7c1979df984bd9046f06b..efe756cc21ad3cf0adeda8625c8c484c69816935 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257/7\346\256\265\347\240\201/solution.md" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257/7\346\256\265\347\240\201/solution.md" @@ -21,30 +21,215 @@ ## aop ### before ```cpp - +#include +using namespace std; +int use[10]; +int ans, e[10][10], father[10]; +void init() +{ + + e[1][2] = e[1][6] = 1; + e[2][1] = e[2][7] = e[2][3] = 1; + e[3][2] = e[3][4] = e[3][7] = 1; + e[4][3] = e[4][5] = 1; + e[5][4] = e[5][6] = e[5][7] = 1; + e[6][1] = e[6][5] = e[6][7] = 1; +} + +int find(int a) +{ + if (father[a] == a) + return a; + father[a] = find(father[a]); + return father[a]; +} ``` ### after ```cpp +int main() +{ + init(); + dfs(1); + cout << ans; + return 0; +} ``` ## 答案 ```cpp - +void dfs(int d) +{ + if (d > 7) + { + for (int i = 1; i <= 7; i++) + { + father[i] = i; + } + + for (int i = 1; i < 8; i++) + { + for (int j = 1; j < 8; j++) + { + if (e[i][j] == 1 && use[i] && use[j]) + { + int fx = find(i); + int fy = find(j); + if (fx != fy) + { + father[fx] = fy; + } + } + } + } + int k = 0; + for (int i = 1; i < 8; i++) + { + if (use[i] && father[i] == i) + { + k++; + } + } + if (k == 1) + { + ans++; + } + return; + } + + use[d] = 1; + dfs(d + 1); + use[d] = 0; + dfs(d + 1); +} ``` ## 选项 ### A ```cpp - +void dfs(int d) +{ + if (d > 7) + { + for (int i = 1; i <= 7; i++) + { + father[i] = i; + } + + for (int i = 1; i < 8; i++) + { + for (int j = 1; j < 8; j++) + { + if (e[i][j] == 1 && use[i] && use[j]) + { + int fx = find(i); + int fy = find(j); + if (fx != fy) + { + father[fx] = fy; + } + } + } + } + int k = 0; + for (int i = 1; i < 8; i++) + { + if (father[i] == i) + { + k++; + } + } + if (k == 1) + { + ans++; + } + return; + } + + use[d] = 1; + dfs(d + 1); + use[d] = 0; + dfs(d + 1); +} ``` ### B ```cpp - +void dfs(int d) +{ + if (d > 7) + { + for (int i = 1; i <= 7; i++) + { + father[i] = i; + } + + for (int i = 1; i < 8; i++) + { + for (int j = 1; j < 8; j++) + { + if (e[i][j] == 1) + { + int fx = find(i); + int fy = find(j); + if (fx != fy) + { + father[fx] = fy; + } + } + } + } + int k = 0; + for (int i = 1; i < 8; i++) + { + if (use[i] && father[i] == i) + { + k++; + } + } + if (k == 1) + { + ans++; + } + return; + } + + use[d] = 1; + dfs(d + 1); + use[d] = 0; + dfs(d + 1); +} ``` ### C ```cpp - +void dfs(int d) +{ + if (d > 7) + { + for (int i = 1; i <= 7; i++) + { + father[i] = i; + } + + int k = 0; + for (int i = 1; i < 8; i++) + { + if (use[i] && father[i] == i) + { + k++; + } + } + if (k == 1) + { + ans++; + } + return; + } + + use[d] = 1; + dfs(d + 1); + use[d] = 0; + dfs(d + 1); +} ```