//解题思路:在图像外面都围上一层'.',计算每个X周围'.'的个数就是周长。!!!巧妙
#include<iostream>
#include<string.h>
using namespace std;
char map[100][100];
int book[100][100];
int row,col,click_r,click_c;
int count,ty,tx;
int diagonal[4][2] = {{1,1}, {-1,1}, {-1,-1}, {1,-1}};
int next[4][2]={{1,0}, {0,1}, {-1,0}, {0,-1}};
void dfs(int x,int y)
{
int i;//这里的i不能是全局变量,否则出错,具体原因不清楚
book[x][y]=1;
for(i=0;i<4;i++)
{
tx=x+next[i][0];
ty=y+next[i][1];
if(map[tx][ty]=='X'&&book[tx][ty]==0)
dfs(tx,ty);
else if(map[tx][ty]=='.')
count++;
}
for(i=0;i<4;i++)
{
tx=x+diagonal[i][0];
ty=y+diagonal[i][1];
if(map[tx][ty]=='X'&&book[tx][ty]==0)
dfs(tx,ty);
}
}
int main()
{
int i,j;
while(cin>>row>>col>>click_r>>click_c&&row&&col&&click_r&&click_c)
{
memset(map,'.',sizeof(map));
memset(book,0,sizeof(book));
//实际的矩阵大小是从0-row+1,0-col+1。其中我们输入的数据在1-row,1-col
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
cin>>map[i][j];
for(i=0;i<=row+1;i++)
{
for(j=0;j<=col+1;j++)
{
cout<<map[i][j]<<" ";
}
cout<<endl;
}
count=0;
dfs(click_r,click_c);
cout<<count<<endl;
}
return 0;
}
zoj1047-Image Perimeters
最新推荐文章于 2017-08-15 19:36:18 发布