1306

来源:互联网 发布:淘宝卖衣服从哪里进货 编辑:程序博客网 时间:2024/06/06 13:22
#include<stdio.h>#include<cmath>char net[4][5];int max = 0;boolallow (int n, int row, int col){if (net[row][col] == 'X'){return false;}int i;for (i = row; i >= 0; --i){                            //向前遍历该列 if (net[i][col] == '@') //若该列防止过碉堡 return false;   //则该位置不能放置 else if (net[i][col] == 'X')//若遇到墙break;//跳出循环遍历开始行}for (i = col; i >= 0; --i){     //向前遍历该行 if (net[row][i] == '@')//同上 return false;else if (net[row][i] == 'X')break;}return true;}voidBackTrack (int n, int k, int num){if (k == n * n){if (num > max){max = num;}return;}int row = k / n, col = k % n;//由k得出行列坐标if (allow (n, row, col)){net[row][col] = '@';//标志为'@'以说明该位置放置了碉堡 BackTrack (n, k + 1, num + 1);//放置碉堡后进入下层递归 net[row][col] = '.';//可能该位置不放置碉堡的情况可得出最优解 }BackTrack (n, k + 1, num);//不放置碉堡进入下层递归 }intmain (){int n, i;while (scanf ("%d", &n) && n){max = 0;for (i = 0; i < n; ++i){scanf ("%s", net[i]);}BackTrack (n, 0, 0);printf ("%d\n", max);}return 0;}

原创粉丝点击