intdfs(int i, int j) { int ans = 1; mp[i][j] = false; if(i > 0 && mp[i - 1][j]) ans += dfs(i - 1, j); if(j > 0 && mp[i][j - 1]) ans += dfs(i, j - 1); if(i < 2 && mp[i + 1][j]) ans += dfs(i + 1, j); if(j < 3 && mp[i][j + 1]) ans += dfs(i, j + 1); return ans; }
intmain() { int ans = 0; for(int i = 11; i > 6; i--) a[i] = 1; //寻找a[i]等于1的点给mp做上true标记 do{ memset(mp, false, sizeof(mp)); int r = 0, c = 0; for(int i = 0; i < 12; i++)if(a[i]){ mp[i / 4][i % 4] = true; //[i/4]是行数[i%4]是列数 r = i / 4; c = i % 4; } if(dfs(r, c) == 5) ++ans; }while(next_permutation(a, a + 12)); printf("%d\n", ans); return 0; }