[Coursera]算法基础_Week6_深搜(1)_Q1

来源:互联网 发布:mac新建桌面快捷键 编辑:程序博客网 时间:2024/05/11 05:09
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int n, k;int ans[9][9];char map[9][9];int f(int i,int j) {//if (ans[i][j] != -1) {//return ans[i][j];//}int res = 0;if (i == n) {if (j > 1) {//ans[i][j] = 0;return 0;}if (j == 0) {//ans[i][j] = 1;return 1;}for (int x = 1; x <= n; x++) {if (map[x][i] == '.')continue;int fl = 1;for (int y = 1; y < i; y++)if (map[x][y] == '@') {fl = 0; break;}if (fl == 1)res++;}//ans[i][j] = res;return res;}if (j == 0) {//ans[i][j] = 1;return 1;}for (int x = 1; x <= n; x++) {if (map[x][i] == '.')continue;int fl = 1;for (int y = 1; y < i; y++)if (map[x][y] == '@') {fl = 0; break;}if (fl == 1) {map[x][i] = '@';res += f(i + 1, j - 1);map[x][i] = '#';}}res += f(i + 1, j);//ans[i][j] = res;return res;}int main() {while (true) {memset(ans, -1, sizeof(ans));cin >> n >> k;if (n == -1)break;getchar();for (int x = 1; x <= n; x++) {for (int y = 1; y <= n; y++)map[x][y] = getchar();getchar();}int res = f(1, k);cout << res << endl;}return 0;}

0 0
原创粉丝点击