您的位置:首页 > 其它

POJ 1573

2015-06-10 16:33 274 查看
#include<iostream>
#include<stdio.h>
#define MAXN 15
using namespace std;

char _m[MAXN][MAXN];
bool mark[MAXN][MAXN];
int  record[MAXN][MAXN];

int r;
int c;
void dfs(int i,int j);
int main()
{
//freopen("acm.acm","r",stdin);
int i;
int j;
int place;
while(cin>>r>>c>>place)
{
if(!r && !c && !place)
break;
-- place;
memset(mark,false,sizeof(mark));
//    memset(record,0,sizeof(record));
for(i = 0; i < r; ++ i)
{
for(j = 0; j < c; ++ j)
{
record[i][j] = 1;
}
}
for(i = 0; i < r; ++ i)
{
for(j = 0; j < c; ++ j)
{
cin>>_m[i][j];
}
}
record[0][place] = 1;
mark[0][place] = true;
dfs(0,place);
//    for(i = 0; i < r; ++ i)
//    {
//        for(j = 0; j < c; ++ j)
//        {
//            cout<<record[i][j]<<" ";
//        }
//        cout<<endl;
//    }
}
}
void fun_1(int num);
void fun_2(int num,int num_1);
void dfs(int i,int j)
{
int tem1;
int tem2;
if(_m[i][j] == 'E')
{
if(j + 1 < c)
{
if(!mark[i][j+1])
{
mark[i][j+1] = true;
record[i][j+1] += record[i][j];
dfs(i,j+1);
return ;
}
else
{
fun_2(record[i][j+1]-1,record[i][j]-record[i][j+1]+1);
return ;
}
}
else
{
fun_1(record[i][j]);
return ;
}
}///////////////////////

if(_m[i][j] == 'S')
{
if(i + 1 < r)
{
if(!mark[i+1][j])
{
mark[i+1][j] = true;
record[i+1][j] += record[i][j];
dfs(i+1,j);
return ;
}
else
{
fun_2(record[i+1][j]-1,record[i][j]-record[i+1][j]+1);
return ;
}
}
else
{
fun_1(record[i][j]);
return ;
}
}//////////////////////////////

if(_m[i][j] == 'W')
{
if(j - 1 >= 0)
{
if(!mark[i][j-1])
{
mark[i][j-1] = true;
record[i][j-1] += record[i][j];
dfs(i,j-1);
return ;
}
else
{
fun_2(record[i][j-1]-1,record[i][j]-record[i][j-1]+1);
return ;
}
}
else
{
fun_1(record[i][j]);
return ;
}
}///////////////////////////////////////////

if(_m[i][j] == 'N')
{
if(i - 1 >= 0)
{
if(!mark[i-1][j])
{
mark[i-1][j] = true;
record[i-1][j] += record[i][j];
dfs(i-1,j);
return;
}
else
{
fun_2(record[i-1][j]-1,record[i][j]-record[i-1][j]+1);
return ;
}
}
else
{
fun_1(record[i][j]);
return ;
}
}
}

void fun_1(int num)
{
cout<<num;
//    if(num != 1)
cout<<" step(s) to exit"<<endl;
//    else
//        cout<<" step to exit"<<endl;
}

void fun_2(int num,int num_1)
{
cout<<num;
//    if(num != 1)
cout<<" step(s) before a loop of ";
//    else
//        cout<<" step before a loop of ";
cout<<num_1;
//    if(num_1 != 1)
cout<<" step(s)"<<endl;
//    else
//        cout<<" step"<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: