比赛 20140714上午练习 评测结果 AAAAAAAAAA
题目名称 冲出亚马逊之圣战前夜 最终得分 100
用户昵称 752199526 运行时间 0.005 s
代码语言 C++ 内存使用 0.41 MiB
提交时间 2014-07-14 10:01:37
显示代码纯文本
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include <cstdlib>
#include<cstring>
#include<cctype>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<cassert>
#include<algorithm>
#include<functional>
#include<ctime>
using namespace std;
ifstream fin("ymxpre.in");
ofstream fout("ymxpre.out");
int map[110][110],vis[110][110],n,ans=0;
bool OK=false;
const int xx[5]={0,1,0,-1,0};
const int yy[5]={0,0,1,0,-1};
void DFS(int x,int y);
int main()
{
	//Init
	fin>>n;
	memset(map,0,sizeof(map));
	memset(map,0,sizeof(map));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			char k;fin>>k;
			if(k=='0'||k=='2'||k=='5'){map[i][j]=vis[i][j]=1;}//统一变量:1为可走;0为不可走或走过
		}
	}
	DFS(1,1);//搜索到(n,n)为止
	if(OK)fout<<"yes"<<endl<<ans<<endl;
	else fout<<"no"<<endl<<ans<<endl;
	return 0;
}
void DFS(int x,int y)
{
	if((map[x][y]==0)||(vis[x][y]==0))return;
	vis[x][y]=0;ans++;
	if(x==n&&y==n){OK=true;return;}//到达终点
	for(int i=1;i<=4;i++)
	{
		int xi=x+xx[i],yi=y+yy[i];DFS(xi,yi);
	}
}