POJ 1111
来源:互联网 发布:小岛秀夫 知乎 编辑:程序博客网 时间:2024/06/01 10:11
题目大意:先输入一个矩阵,再输入一个X的位置,然后输出与这个X在八个方向能够连起来的所有X组成的图形的周长。
很简单的题目。基本可以说是个水题,不过在求周长反方面有点难度。我采用的是笨方法:如果有一个边被2个(最多有2个)X包含,哪么令这条边为0,否则为1
#include<iostream>
using namespace std;
void DFS(int x,int y);
char a[110][110];
bool H[200][200];
bool V[200][200];
int m,n;
int x,y;
struct item
{
int x;
int y;
};
item dir[8];
int main()
{
dir[0].x=-1;
dir[0].y=0;
dir[1].x=1;
dir[1].y=0;
dir[2].x=0;
dir[2].y=-1;
dir[3].x=0;
dir[3].y=1;
dir[4].x=-1;
dir[4].y=-1;
dir[5].x=-1;
dir[5].y=1;
dir[6].x=1;
dir[6].y=-1;
dir[7].x=1;
dir[7].y=1;
int result;
int i,j;
while(cin>>m>>n>>x>>y)
{
memset(H,0,sizeof(H));
memset(V,0,sizeof(V));
result=0;
if(m==0&&n==0)
break;
for(i=0;i<m;i++)
{
scanf("%s",a[i]);
}
x=x-1;
y=y-1;
a[x][y]='.';
H[x][y]=H[x][y]+1;
H[x+1][y]=H[x+1][y]+1;
V[x][y]=V[x][y]+1;
V[x][y+1]=V[x][y+1]+1;
DFS(x,y);
for(i=0;i<=m;i++)
for(j=0;j<=n;j++)
{
result+=H[i][j]+V[i][j];
}
cout<<result<<endl;
}
return 0;
}
void DFS(int x,int y)
{
int i;
int g,h;
for(i=0;i<8;i++)
{
g=x+dir[i].x;
h=y+dir[i].y;
if(g<0||h<0||g>=m||h>=n)
continue;
if(a[g][h]=='X')
{
a[g][h]='.';
H[g][h]=(H[g][h]+1)%2;
H[g+1][h]=(H[g+1][h]+1)%2;
V[g][h]=(V[g][h]+1)%2;
V[g][h+1]=(V[g][h+1]+1)%2;
DFS(g,h);
}
}
}
- POJ 1111
- poj---1111
- poj 1111
- poj 1111
- POJ 1111 Image Perimeters
- poj 1111 Image Perimeters
- POJ 1111 Image Perimeters
- Poj 1111 Image Perimeters
- POJ 1111 - Image Perimeters
- poj 1111 Image Perimeters
- POJ-1111-Image Perimeters
- poj 1111 Image Perimeters
- POJ 1111 Image Perimeters
- POJ:1111 Image Perimeters
- DFS专攻:POJ 1111
- poj 1111:Image Perimeters
- POJ 1111 Image Perimeters
- POJ Image Perimeters 1111
- 汇编实验题~~~显示菱形
- PKU2387 Til the Cows Come Home
- 捐款,想说拒绝不容易。。
- unix版的GSL的安装
- svn登陆时它出现:Authorization failed
- POJ 1111
- Hadoop源代码分析(一)
- 从零开始学习Python脚本语言
- Windows下架设Subversion服务器——转载
- Windows下架设Subversion服务器——转载
- VHDL:EPM570 IIC和按键
- 关键链法vs关键路径法
- .NET 横向打印,自定义纸张的横向打印
- int 转 string