poj 1111||zoj 1047 Image Perimeters(dfs)

题意:

确实很难看懂>_<,不过发现其本质的话就很简单了。由‘.’和‘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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值