感觉没问题,但是60分
查看原帖
感觉没问题,但是60分
1583541
a2502411217楼主2024/12/19 21:29
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int b[10002][10002];
void ling(int,int,int,int);
int main()
{
	int m,n;
	scanf("%d %d",&n,&m);
	
	int a[n+2][m+2];
	for(int i=0,j=0;i<=n+1;j++)
	{
		a[i][j]=0;
		b[i][j]=-1;
		if(j==m+1)
		{
			i++;
			j=-1;
		}
	}
	//输入 
	for(int i=1,j=1;i<=n;j++)
	{
		scanf("%d",&a[i][j]);
		if(j==m)
		{
			i++;
			j=0;
		}
	}
	//转化为扫雷,9为雷,0为空 
	for(int i=1,j=1;i<=n;j++)
	{
		b[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];
		if(a[i][j]==1)
		{
			b[i][j]=9;
		}
		if(j==m)
		{
			i++;
			j=0;
		}
	}
	//检测 
//	printf("\n");
//	for(int k=1,l=1;k<=n;l++)
//	{
//		printf("%d ",b[k][l]);
//		if(l==m)
//		{
//			printf("\n");
//			k++;
//			l=0;
//		}
//	}
//	printf("\n");
	//再转化 去除点开空格 
	for(int i=1,j=1;i<=n;j++)
	{
		if(b[i][j]==0)
		{
			if(b[i-1][j-1]!=0)
			{
				b[i-1][j-1]=-1;
			}
			if(b[i-1][j]!=0)
			{
				b[i-1][j]=-1;
			}
			if(b[i-1][j+1]!=0)
			{
				b[i-1][j+1]=-1;
			}
			if(b[i][j-1]!=0)
			{
				b[i][j-1]=-1;
			}
			if(b[i][j+1]!=0)
			{
				b[i][j+1]=-1;
			}
			if(b[i+1][j-1]!=0)
			{
				b[i+1][j-1]=-1;
			}
			if(b[i+1][j]!=0)
			{
				b[i+1][j]=-1;
			}
			if(b[i+1][j+1]!=0)
			{
				b[i+1][j+1]=-1;
			}
		}
		if(j==m)
		{
			i++;
			j=0;
		}
	}
	
	//计算
	int sum=0;
	for(int i=1,j=1;i<=n;j++)
	{
		if(b[i][j]>=1&&b[i][j]<=8)
		{
			sum++;
		}
		if(b[i][j]==0)
		{
			sum++;
			ling(n,m,i,j);
		}
		if(j==m)
		{
			i++;
			j=0;
		}
	}
	printf("%d",sum);
	return 0;
}
void ling(int n,int m,int i,int j)//将一个0(空)及其相关的0(空)转化为-1 
{
	b[i][j]=-1;
	if(b[i-1][j-1]==0)
	{
		ling(n,m,i-1,j-1);
	}
	if(b[i-1][j]==0)
	{
		ling(n,m,i-1,j);
	}
	if(b[i-1][j+1]==0)
	{
		ling(n,m,i-1,j-1);
	}
	if(b[i][j-1]==0)
	{
		ling(n,m,i,j-1);
	}
	if(b[i][j+1]==0)
	{
		ling(n,m,i,j+1);
	}
	if(b[i+1][j-1]==0)
	{
		ling(n,m,i+1,j-1);
	}
	if(b[i+1][j]==0)
	{
		ling(n,m,i+1,j);
	}
	if(b[i+1][j+1]==0)
	{
		ling(n,m,i+1,j+1);
	}
}
2024/12/19 21:29
加载中...