士兵布阵 深搜

 

题目描述

在很久很久以前,有A和B两个国家发生了战争。整个战场分成一个M行N列的矩阵,矩阵里面有着空地和几片草地。这些草地有大有小。一个1x1的草丛可以隐藏3个士兵,A国将领喜欢蹲草战术,只要整个军队可以隐藏在草丛里面,就可以胜利。将领要独自隐藏在一个草丛。


对于每个1×1的草从,它与周围(上下左右)的草丛是连在一起的。


输入

第一行输入三个数M,N,K(1<=m、n、k<=1500),来表示矩阵的行、列和军队士兵数量。

接下来M行N列,输入矩阵,“.”表示平底“*”表示草丛。

输出

如果军队士兵和将领都可以躲进草丛,则输出“Win!”否则输出“Lose!”

样例输入

3 3 6
.**
...
.*.

样例输出

Win!
 
 
 
#include <iostream>
using namespace std;
char a[1501][1501];   
int m,n,num;
int cnt;
void dfs (int x, int y)  
{  
    if (a[x][y]=='.' || x < 1 || x >n|| y < 1 || y > m)  
        return ;  
	++cnt ;  
    a[x][y] ='.';  
	dfs (x-1, y) ;  
    dfs (x, y-1) ;  
    dfs (x+1, y) ;  
    dfs (x, y+1) ;  
}  
int main ()
{
	
	while(cin>>m>>n>>num)
	{
		int i,j,k=0,v1=600;
		if(m==0&&n==0) break;
		for( i=1;i<=n;i++)
			for( j=1;j<=m;j++)
			{
				cin>>a[i][j];
				if(a[i][j]=='*')
					k++;
				
			}
			for( i=1;i<=n;i++)
				for( j=1;j<=m;j++)
				{
					if(a[i][j]=='*')
					{if(v1>cnt)
					v1=cnt; 
					cnt=0;
					dfs(i,j);
					}	
				}
				if((k-v1)*3>=num)
					cout<<"Win!"<<endl;
				else
					cout<<"Lose!"<<endl;
				
	}
	return 0;
}


 
 
 
 

你可能感兴趣的:(士兵布阵)