poj 1573 模擬

2015/1/25


水題


#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<climits>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long ll;  

#define mod 10007
#define lson pos<<1,l,mid
#define sc(n) scanf("%d",&n)
#define rson pos<<1|1,mid+1,r
#define pr(n) printf("%d\n",n)
#define met(n,m) memset(n, m, sizeof(n))
#define F(x,y,i) for(int i = x;i > y; i--)
#define f(x,y,i) for(int i = x;i < y; i++)
#define ff(x,y,i) for(int i = x;i <= y; i++)
#define FF(x,y,i) for(int i = x;i >= y; i--) 

const int N=100500;
const int inf = INT_MAX;

int Max(int a,int b)
{
	return a>b?a:b;
}

int Min(int a,int b)
{
	return  a<b?a:b;
}
int cnt , ct, n , m;
char s[100][100];
int vis[100][100];
int tp[4][2]={
	-1,0,
	0,1,
	1,0,
	0,-1
};

int dfs(int x,int y)
{
	if(x<0||x>=n||y<0||y>=m)
	{
		 printf("%d step(s) to exit\n",cnt);
		return 0;
	}
	
	if(vis[x][y])
	{
		vis[x][y] = 0;
		return 1;
	}
	
	int temp;
	cnt++;
	if(s[x][y] == 'N')temp = 0;
	if(s[x][y] == 'E')temp = 1;
	if(s[x][y] == 'S')temp = 2;
	if(s[x][y] == 'W')temp = 3;
	
	vis[x][y]= 1;
	if(dfs(x+tp[temp][0],y+tp[temp][1]))
	{
			return 1;
	}


	 return 0;
}

void Dfs(int x,int y)
{
	if(!vis[x][y])
	{
		printf("%d step(s) before a loop of %d step(s)\n",ct,cnt-ct);
		return ;
	}
	
	int temp;
	ct++;
	if(s[x][y] == 'N')temp = 0;
	if(s[x][y] == 'E')temp = 1;
	if(s[x][y] == 'S')temp = 2;
	if(s[x][y] == 'W')temp = 3;
	Dfs(x+tp[temp][0],y+tp[temp][1]);
}

int main()  
{  
    int tot, x, d;
    while(scanf("%d%d%d",&n,&m,&d)!=EOF)
    {
    	if(n==0&&m==0&&d==0)break;
    	met(vis,0);
    	ct = cnt = 0;
   	 f(0,n,i)
   	 {
 	   	scanf("%s",s[i]);
 	   }
 	 
	 if(dfs(0,d-1))
	 {
 		Dfs(0,d-1);
 	}   
 	   
		    	
    }
    return 0;  
}  
	


發佈了123 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章