Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

TLE ,有谁帮我看看

Posted by bjtuacmer200710 at 2007-08-03 15:45:24 on Problem 3316
#include <iostream>
using namespace std;
char a[202][202];
bool sign[202][202];

int main(int argc, char* argv[])
{
	int n,m,i,j,k,num[202][202],x[202],y[202];
	bool a[202][202],sign[202][202];
	while(scanf("%d%d",&n,&m)&&n+m)
	{
		memset(sign,0,sizeof(sign));
		memset(a,'0',sizeof(a));
		memset(num,0,sizeof(num));
		k=0;
		for(i=1;i<=n;i++)
		{
			getchar();
			for(j=1;j<=m;j++)
				scanf("%c",&a[i][j]);
		}
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
			{
				num[i][j]=(a[i-1][j]=='1')+(a[i][j-1]=='1')+(a[i+1][j]=='1')+(a[i][j+1]=='1');
				//四周1的个数
				if(a[i][j]=='1'&&num[i][j]<=1)//蛇的端点
				{
					x[k]=i;
					y[k++]=j;
				}
			}
		int count=0;//MAX蛇的个数
		while(k--)
		{
			if(!sign[x[k]][y[k]])
			{
				sign[x[k]][y[k]]=1;//是否访问
				i=x[k];
				j=y[k];
				while(1)
				{
					if(num[x[k]][y[k]]==0)//蛇长为1
						break;
					if(a[i-1][j]=='1'&&!sign[i-1][j])
						i--;
					else
					{
						if(a[i][j-1]=='1'&&!sign[i][j-1])
							j--;
						else
						{
							if(a[i+1][j]=='1'&&!sign[i+1][j])
								i++;
							else
								if(a[i][j+1]=='1'&&!sign[i][j+1])
									j++;
						}
					}
					sign[i][j]=1;
					if(num[i][j]!=2)
						break;	
				}
				if(num[i][j]>2)//有分支,不是蛇
				{
					sign[i][j]=0;
					continue;
				}
				if(num[x[k]-1][y[k]]==1||num[x[k]][y[k]-1]==1||
					num[x[k]+1][y[k]]==1||num[x[k]][y[k]+1]==1)
						continue;
				if(num[i-1][j]==1||num[i][j-1]==1||
					num[i+1][j]==1||num[i][j+1]==1)
						continue;
				count++;
			}

		}
		printf("%d\n",count);	
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator