CodeForces Round #290 Div.2

A. Fox And Snake

题意:给出行数,输出相应的图形

#include<iostream>  

#include<cstdio>  

#include<cstring>  

#include<algorithm>  

using namespace std;

int main()

{

	int n,m,i,j,vis=1;

	scanf("%d %d",&n,&m);

	for(i=1;i<=n;i++)

	{

		if(vis==1)

		{

			for(j=1;j<=m;j++)

			printf("#");

			printf("\n");

			vis=2;

			continue;

		}

		if(vis==2)

		{

			for(j=1;j<=m-1;j++)

			printf(".");

			printf("#");

			printf("\n");

			vis=3;

			continue;

		}

		if(vis==3)

		{

			

			for(j=1;j<=m;j++)

			printf("#");

			printf("\n");

			vis=4;

			continue;   		

		}

		if(vis==4)

		{

			printf("#");

			for(j=1;j<=m-1;j++)

			printf(".");

			

			printf("\n");

			vis=1;

			continue;   		

		}

		

	}

		

}

  敲完发现用行数直接对4取余就可以=_=

B. Fox And Two Dots (DFS)

题意:给出n行m列的字母组成的矩形,问这个矩形里是否存在环(字母相同,且至少是2*2的正方形)

对每一个字母进行搜索,每搜索一次标记vis[i][j]=1,然后搜索的时候防止它往回搜,直到搜到一个已经访问过的字母,说明成环。

#include<iostream>  

#include<cstdio>  

#include<cstring>  

#include<algorithm>  

using namespace std;

int n,m,step,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

int vis[55][55],flag;

char map[55][55];

void dfs(int x,int y,int px,int py)

{

	if(x<1||x>n||y<1||y>m||map[x][y]!=map[px][py])

	return;

	if(vis[x][y])

	{

		flag=1;	

		printf("Yes\n");

	exit(0);

	}

	vis[x][y]=1;

	for(int k=0;k<4;k++)

	{

		int a=x+dir[k][0];

		int b=y+dir[k][1];

		if(a==px&&b==py)

		continue;

		dfs(a,b,x,y);

	}

}



int main()

{

	int i,j;

	scanf("%d %d",&n,&m);

	for(i=1;i<=n;i++)

		for(j=1;j<=m;j++)

		cin>>map[i][j];

		

		for(i=1;i<=n;i++)

		{

			

			for(j=1;j<=m;j++)

			{

				flag=0;

				memset(vis,0,sizeof(vis));

				dfs(i,j,i,j);

			//	printf("flag=%d\n",flag);

			

			}			

		}

		if(flag==0)

		printf("No\n");

}

  搜索写得好艰辛+_+
加油--go--go--

C是拓扑排序------预留-----

你可能感兴趣的:(codeforces)