| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
各位师兄帮下忙!新手求救啊 一道类似迷宫的问题问题描述:
对于某个m*n的字符串数组,相当于一个m行n列的平面形状的方格。里面S表示起点,W表示障碍,B表示可走(但是不一定可以通),X表示出口。对于起点S,有8个方向可以走,当然前提是在没有障碍的情况之下,其中可以分为单步走(on foot)和跳步走(by jump)两种情况,从起点S开始追寻最短的出口路径count2。
测试数据:
Sample Input
3
3 3
SWB
BWB
XBB
5 4
BXWB
BBWS
BBWB
BBWB
BBBB
3 2
WX
WW
WS
Sample Output
2
2
NO ANSWER
我的算法:
#include "iostream.h"
#include "string.h"
#include "stdio.h"
char maze[100][100];
int fc[8]={2,2,-2,-2,1,-1,0,0},fr[8]={2,-2,2,-2,0,0,1,1},total,startc,startr,endc,endr;
int check(int i,int j,int k,int c,int r)
{
int flag=1;
i=i+fc[k];
j=j+fr[k];
if(i<1 || i>c || j<1 || j>r)
flag=0;
else if(maze[i][j]=='W')
flag=0;
return flag;
}
void output(int c,int r)
{
int i,j;
for(i=1;i<=c;i++)
{
cout<<endl;
for(j=1;j<=r;j++)
{
if(maze[i][j]=='0')
{
printf("%c",'*');
total=total+1;
}
else
printf("%c",'+');
}
}
}
void search(int i,int j,int c,int r)
{
int k,newc,newr;
for(k=1;k<=8;k++)
{
if(check(i,j,k,c,r)==1)
{
newc=i+fc[k];
newr=j+fr[k];
maze[newc][newr]='0';
if(newc==endc && newr==endr)
{
output(c,r);
break;
}
else
search(newc,newr,c,r);
}
}
maze[i][j]='1';
}
void main()
{
int c,r,i,j;
cin>>c>>r;
for(i=1;i<=c;i++)
{
for(j=1;j<=r;j++)
{
cin>>maze[i][j];
//scanf("%c",&maze[i][j]);
if(maze[i][j]=='S')
{
startc=i;
startr=j;
}
if(maze[i][j]=='X')
{
endc=i;
endr=j;
}
}
//getchar();
}
total=0;
maze[startc][startr]='0';
search(startc,startr,c,r);
cout<<endl;
cout<<total<<endl;
//pintf("%d\n",search(startc,startr,c,r));
}
请大家帮帮忙啊!程序哪里有错,得不到答案啊。谢谢!邮箱是ptchenmin1987@163.com
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator