Description
每组测试数据以三个整数N,M,T(0<n, m≤20, t>0)开头,分别代表迷宫的长和高,以及公主能坚持的天数。
紧接着有M行,N列字符,由".","*","P","S"组成。其中 "." 代表能够行走的空地。 "*" 代表墙壁,Jesse不能从此通过。
"P" 是公主所在的位置。 "S" 是Jesse的起始位置。 每个时间段里Jesse只能选择“上、下、左、右”任意一方向走一步。
Prototype
int SSaveP (int *maze[], int M, int n, int t)
Input Param
maze 迷宫布局(这里用二维数组实现布局)
M 迷宫(数组)行数
N 迷宫(数组)列数
T 公主能坚持的天数
Output Param
无
Return Value
0 可以救出公主
-1 不可以救出公主
#include<stdio.h>
#include<string.h>
#include<queue>
#include "OJ.h"
struct node{
int x;
int y;
int time;
};
int step[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int SSavep(char *visited, int t, int n, int m)
{
int p=0,s=0;
for(int i=0;i<m*n;i++){
if(visited[i]=='P'){p=i;}
else if(visited[i]=='S'){s=i;}
}
node queue[1000];
int cur=0;
queue[0].x=s%n;
queue[0].y=s/n;
queue[0].time=0;
int queue_tail=1;
while(cur<queue_tail){
for(int i=0;i<4;i++){
node tmp;
tmp.x =queue[cur].x+step[i][0];
tmp.y =queue[cur].y+step[i][1];
tmp.time=queue[cur].time+1;
if(tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<m){
int value=tmp.x+tmp.y*n;
if(value==p){
if(tmp.time<=t)
return 0;
else return -1;
}
else if(visited[value]!='*'&&value!=s){
visited[value]='*';
queue[queue_tail].x=tmp.x;
queue[queue_tail].y=tmp.y;
queue[queue_tail].time=tmp.time;
queue_tail++;
}
}
}
cur++;
}
return -1;
}