码迷,mamicode.com
首页 > Web开发 > 详细

HDU ACM 1045 Fire Net 暴力搜索

时间:2015-06-04 15:46:18      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   搜索   

分析:放过炮台的标记为‘ @ ‘(回溯要还原) 递归,下一次遍历时向四个方向延伸(一行或者一列),找到‘@‘ 则标记为不行,若找到‘X‘或边界则标记为行。

这题貌似还可以用二分匹配做。

#include<iostream>
using namespace std;

#define N 5
char map[N][N];
int dir[4][2]={-1,0,0,-1,1,0,0,1};
int n,max;

bool judge(int x,int y)
{
	int i,tx,ty;

	for(i=0;i<4;i++)
	{
		tx=x;
		ty=y;
		while(true)             //一直往外延伸
		{
    		tx=tx+dir[i][0];
    		ty=ty+dir[i][1];
	    	if(map[tx][ty]=='@')
	    		return false;
	    	else if(map[tx][ty]=='X')
		    	break;
	    	else if(tx< 1 || ty<1 || tx>n || ty>n)
	    		break;
		}
	}
	return true;
}

void dfs(int num)
{
	int i,j;

	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(map[i][j]=='.' && judge(i,j))
			{
				map[i][j]='@';
				dfs(num+1);
				map[i][j]='.';
			}
	if(max<num)      //得到最大值
		max=num;
}

int main()      
{
	int i,j;

	while(cin>>n,n)
	{
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				cin>>map[i][j];
		max=0;
		dfs(0);
		cout<<max<<endl;
	}
    return 0;      
}


HDU ACM 1045 Fire Net 暴力搜索

标签:c   c++   acm   算法   搜索   

原文地址:http://blog.csdn.net/a809146548/article/details/46362015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!