⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1002.cpp

📁 浙江大学acmoj上的几道题目的代码
💻 CPP
字号:
//要 注意不同的炮塔可能在同一个点产生叠加  所以不能直接副直


#include<iostream>
using namespace std;

int line;
char square[5][5];
char s[5][5];
int maxnum=0;


void copy(char ss[][5],char l[][5])
{
	int i,j;
	for(i=1;i<5;i++)
		for(j=1;j<5;j++)
			l[i][j]=ss[i][j];
}

void put(int r,int l)
{
	int i;
	s[r][l]=1;
	for(i=r-1;i>0;i--)
	{
		if(s[i][l]=='X')
			break;
		s[i][l]+=2;
	}
	for(i=r+1;i<=line;i++)
	{
		if(s[i][l]=='X')
			break;
		s[i][l]+=2;
	}
	for(i=l-1;i>0;i--)
	{
		if(s[r][i]=='X')
			break;
		s[r][i]+=2;
	}
	for(i=l+1;i<=line;i++)
	{
		if(s[r][i]=='X')
			break;
		s[r][i]+=2;
	}	
}

void re(int r,int l)
{
	int i;
	s[r][l]='.';
	for(i=r-1;i>0;i--)
	{
		if(s[i][l]==2)
			s[i][l]='.';
		else if(s[i][l]=='X')
			break;
		else
			s[i][l]-=2;
	}
	for(i=r+1;i<=line;i++)
	{
		if(s[i][l]==2)
			s[i][l]='.';
		else if(s[i][l]=='X')
			break;
		else
			s[i][l]-=2;
	}
	for(i=l-1;i>0;i--)
	{
		if(s[r][i]==2)
			s[i][l]='.';
		else if(s[r][i]=='X')
			break;
		else
			s[r][i]-=2;
	}
	for(i=l+1;i<=line;i++)
	{
		if(s[r][i]==2)
			s[i][l]='.';
		else if(s[r][i]=='X')
			break;
		else
			s[r][i]-=2;
	}	
}


void cal(int row,int li,int sum)
{
	if(row>line)
	{
		if(sum>maxnum)
		{
			maxnum=sum;
		}
	}
	else
	{
		if(s[row][li]=='.')
		{
			put(row,li);
			if(li==line)
				cal(row+1,1,sum+1);
			else
				cal(row,li+1,sum+1);
			re(row,li);
		}
		if(li==line)
			cal(row+1,1,sum);
		else
			cal(row,li+1,sum);
		
		
	}
}


int main()
{
	int n;
	int i,j,k;
	cin>>line;
	while(line!=0)
	{
		for(i=1;i<=line;i++)
		{
			for(j=1;j<=line;j++)
				cin>>square[i][j];
		}
		copy(square,s);
		cal(1,1,0);
		cout<<maxnum<<endl;
		maxnum=0;
		memset(square,0,sizeof(square));
		cin>>line;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -