码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 4499 Cannon 暴力DFS

时间:2015-05-31 12:32:02      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   dfs   

分析:N和M很小,直接暴力搜索即可。

#include<iostream>   
using namespace std;    

#define N 6
#define M 6
int vis[N][M];     //有炮设为2,无炮为0,其他为1
int n,m,q,ans;

#define max(a,b) ((a)>(b)?(a):(b))

bool Valid(int i,int j)   //只需要判断当前和前面的即可(行列)
{
	int fg=0;
	int k;

	if(vis[i][j]==1)
		return false;
	for(k=i-1;k>=0;k--)       //行
		if(vis[k][j]==1)
			fg++;
		else if(vis[k][j]==2)
		{
			if(fg==1)
				return false;
			else
				fg++;
		}

	fg=0;             //列
	for(k=j-1;k>=0;k--)
		if(vis[i][k]==1)
			fg++;
		else if(vis[i][k]==2)
		{
			if(fg==1)
				return false;
			else
				fg++;
		}
	return true;
}

void DFS(int cnt,int x,int y)
{
	int i,j;

	for(i=x;i<n;i++)
		for(j=0;j<m;j++)
		{
			if(i==x && j<y)
				continue;
			if(Valid(i,j))
			{
				vis[i][j]=2;
				DFS(cnt+1,i,j+1);
				vis[i][j]=0;
			}
		}
	ans=max(ans,cnt);
}

int main()      
{  
	int a,b,i;

	ios::sync_with_stdio(false);
	while(cin>>n>>m>>q)
	{
		ans=0;
		memset(vis,0,sizeof(vis));
		for(i=0;i<q;i++)
		{
			cin>>a>>b;
			vis[a][b]=1;
		}
		DFS(0,0,0);
		cout<<ans<<endl;
	}
    return 0;      
}


HDU ACM 4499 Cannon 暴力DFS

标签:c   c++   acm   算法   dfs   

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

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