杭电OJ 1045:Fire Net

来源:互联网 发布:c语言实现环形缓冲区 编辑:程序博客网 时间:2024/04/28 19:05

题目的数据量比较小,直接暴力搜索就可以过。

C++代码:

#include<stdio.h>int n,maxnum=0;char map[5][5];bool check(int row,int col){int i,j;for(i=row;i>=0;i--){if(map[i][col]=='O')return false;if(map[i][col]=='X')break;}for(j=col;j>=0;j--){if(map[row][j]=='O')return false;if(map[row][j]=='X')break;}return true;}void dfs(int i,int num){int row,col;if(i==n*n){if(num>maxnum)maxnum=num;return;}else{row=i/n;col=i%n;if(map[row][col]=='.'&&check(row,col)){map[row][col]='O';dfs(i+1,num+1);map[row][col]='.';}dfs(i+1,num);}}int main(){//freopen("1.txt","r",stdin);while(scanf("%d",&n)!=EOF&&n){maxnum=0;for(int i=0;i<n;i++)scanf("%s",&map[i]);dfs(0,0);printf("%d\n",maxnum);}return 0;}


0 0