排版不整齐怎么办?大佬,求助。

回复帖子

@kqing 2019-01-12 20:21 回复

总的大致思路:

第一

先找找图形里是否有不合规则的(不是四边形)

第二

图形#数目不可能为三。

假设 如图:

# #
# #

(1,1) 找到的有: 自身

1个

(1,2) 找到的有: 自身 (1,1)

2个

(2,1) 找到的有: 自身 (1,1)

2个

(2,2) 找到的有: 自身 (1,1)(1,2)(2,1)

4个

所以四边形不可能找到三个。

顺便说一下:(可以用 x-1 x+1 都可以,但要对称。)

第三

找到一个#,为一组加一。但要让这一组的#全部消失,避免组计算的重复。

第四

若没有#出现,便得出组数。

非常重要一点 !!!谨记!!! 输出一定带标点,标点不要离字母太远。

代码如下:

include <bits/stdc++.h>

using namespace std;

int const maxn=1100;

int R,C,cnt;

char ju[maxn][maxn];

int a[maxn*maxn][3];

int dx[5]={0,0,-1,0,1};

int dy[5]={0,-1,0,1,0};

void init()

{

 cin>>R>>C;
 for(int i=1;i<=R;i++)
 for(int j=1;j<=C;j++)
{
 cin>>ju[i][j];
} 

}

int pd(int x,int y)

{

  int num=0;

  if(ju[x][y]=='#') num++;

  if(ju[x-1][y]=='#') num++;

  if(ju[x-1][y-1]=='#') num++;

  if(ju[x][y-1]=='#') num++;

  if(num==3) return 0;

  return 1;

}

void bfs(int x1,int y1)

{

  cnt++;  **//找到一组;**

  int head, tail;

  a[1][1]=x1;

  a[1][2]=y1;

  head=0;

  tail=1;

  do
{
  head++;

  for(int i=1;i<=4;i++)

 {
  int x,y;

  x=a[head][1]+dx[i];  //四边搜索 

  y=a[head][2]+dy[i];

  if(ju[x][y]!='.'&&x>0&&x<=R&&y>0&&y<=C)

{
  tail++;

  a[tail][1]=x;

  a[tail][2]=y;

  ju[x][y]='.';  //与#相连的为一组,找到了就让它变为‘.’。

}
}
} while(head<tail);

}

int main()

{

  init(); //填数

  for(int i=1;i<=R;i++)
{
  for(int j=1;j<=C;j++)

  if(i<=R&&j<=C&&pd(i,j)==0) //搜索寻找是否有不是四边形的#
{
  cout<<"Bad placement."<<endl;

  return 0;
}
}
  for(int i=1;i<=R;i++)
{
  for(int j=1;j<=C;j++)

  if(ju[i][j]!='.') //找# (上面的代码排除了不合规则的情况,说明下面都是#都是四边形)
{
  bfs(i,j);
}
}
  cout<<"There are "<<cnt<<" ships."<<endl;

  return 0;

}

@MrWangnacl 2019-01-12 20:32 回复

使用$\mathit{Makidown}$排版

并且站务版不是发这个的地方哦

@yurzhang 2019-01-12 20:37 回复

希望更丰富的展现?使用Markdown

@Qiuly 2019-01-12 20:58 回复

yurzhang +1

翻到最底下实际上就有QvQ

@_Qer 2019-01-12 21:07 回复

建议看看Markdown教程

@kqing 2019-01-12 21:08 回复

@海洋 抱歉,我没有注意发到哪里,下次会注意的。实在对不起