tyvj-1050 LCS DP

刚开始写的竟然WA,至今不知原因...

/*
 * s.c
 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 1010
#define QSIZE 10000

typedef struct _node
{
	int x;
	int y;
}node;

int T,R,C;
char f[SIZE][SIZE];
int g[SIZE][SIZE];
node que[QSIZE];
int head,tail,len;
int d[4][2]={
	{0,1},	/* R */
	{0,-1}, /* L */
	{1,0},  /* D */
	{-1,0}  /* U */
};

int push(int x,int y)
{
	que[tail].x=x;
	que[tail].y=y;
	tail++;
	len++;
	if(tail==QSIZE)
		tail=0;
	return 0;
}

int pop(int *x, int *y)
{
	*x=que[head].x;
	*y=que[head].y;
	head++;
	len--;
	if(head==QSIZE)
		head=0;
	return 0;
}

int search(void) /* flood fill... */
{
	if(f[0][0]=='*' || f[R-1][C-1]=='*')
		return -1;
	
	int i,x,y,xx,yy,start,end;

	/* initialize */
	head=tail=len=0;
	memset(g,0,sizeof(g));
	push(0,0);
	g[0][0]=1;

	while(len>0)
	{
		pop(&x,&y);
		start=0;
		end=3;
		if(f[x][y]=='-') 
			end=1;
		else if(f[x][y]=='|') 
			start=2;
		for(i=start;i<=end;i++)
		{
			xx=x+d[i][0];
			yy=y+d[i][1];
			if(xx>=0 && xx<R && yy>=0 && yy<C && f[xx][yy]!='*' 
				&& !g[xx][yy]) /* !g[xx][yy] <- not visited */
			{
				g[xx][yy]=g[x][y]+1;
				push(xx,yy);
			}
		}
	}
	if(g[R-1][C-1]==0)
		return -1;
	else
		return g[R-1][C-1];
}

	
int main(void)
{
	int i,j;

	freopen("s.in","r",stdin);
	freopen("s.out","w",stdout);

	scanf("%d",&T);
	for(i=0;i<T;i++)
	{
		scanf("%d%d",&R,&C);
		for(j=0;j<R;j++)
			scanf("%s",f[j]);
		printf("%d\n",search());
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值