题意:
确实很难看懂>_<,不过发现其本质的话就很简单了。由‘.’和‘X’组成的矩形,给定行数N,列数M,还有鼠标的点击位置级开始的位置。求该点连通分量的周长。
一个'X'每个面对应一个点。
分析:
题目看得我吐血,而且浙大的图太坑爹了,最近做的几题都这样,造成视觉上的误差。题中的数据全都小于25,果断dfs虽然没仔细去研究过但100以内的数用dfs总是没错的。
哈哈,除了一个地方因为行列搞错了,基本上是一次写成1A。下个星期就开始做bfs吧。
#include <stdio.h>
char a[15][15];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int flag,num,temp;
void dfs(int x,int y,int temp);
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
flag=0;
num=0;
temp=0;
if(n==0&&m==0) break;
for(i=0;i<=n+1;i++)
{
a[i][0]='S';
a[i][m+1]='S';
}
for(j=0;j<=m+1;j++)
{
a[0][j]='S';
a[n+1][j]='S';
}
for(i=1;i<=n;i++)
{
getchar();
{
for(j=1;j<=m;j++)
{
scanf("%c",&a[i][j]);
if(a[i][j]=='.') num++;
}
}
}
dfs(1,1,1);
if(flag==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}
void dfs(int x,int y,int temp)
{
int i;
if(temp==num) {flag=1;return;}
a[x][y]='S';
for(i=0;i<4;i++)
{
if(a[x+dir[i][0]][y+dir[i][1]]!='S')
dfs(x+dir[i][0],y+dir[i][1],temp+1);
}
a[x][y]='.';
return ;
}
光棍节没做这道题目真是遗憾
罗列下这段时间做的dfs。
最近的图类型的dfs
zoj 1002 1709 2100 2165
1002因为老早做的没放在csdn上、其他都有。
字符串搜索的
zoj 1374 2784 2907
比较难得是没有图给出的...
zoj 1457 1204 1110 1711 2412 1694
poj 1011 1256.