实在找不出什么地方WA了,测试数据都过的……留在这里再看吧
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void DFS(int Start, int Startj, int Doori, int Doorj, int Step);
char Trap[10][10];
int Dir[4][2] =
{
{ 1, 0 },
{ -1, 0 },
{ 0, 1 },
{ 0, -1 } };
int N, M, T;
int flag;
int main()
{
//char Trap[8][8];
int i, j;
int Starti, Startj, Doori, Doorj;
int Wall;
char temp[10];
while ((scanf("%d%d%d", &N, &M, &T)) != EOF
&& !(N == 0 && M == 0 && T == 0))
{
Wall = 0; //起点 门
flag = 0;
for (i = 0; i <= N + 1; i++)
{
Trap[i][0] = Trap[i][M + 1] = 'X';
}
for (j = 0; j <= M + 1; j++)
{
Trap[0][j] = Trap[N + 1][j] = 'X';
}
for (i = 1; i <= N; i++)
{
scanf("%s", temp);
for (j = 1; j <= M; j++)
{
//sscanf(temp,"%c", &(Trap[i][j]));
Trap[i][j] = temp[j - 1];
if (Trap[i][j] == 'S')
{
Starti = i;
Startj = j;
}
else if (Trap[i][j] == 'D')
{
Doori = i;
Doorj = j;
}
}
}
flag =0;
DFS(Starti, Startj, Doori, Doorj, 0);
if (flag == 1)
{
printf("YES\n");
}
else if (flag == 0)
{
printf("NO\n");
}
}
return 0;
}
void DFS(int Starti, int Startj, int Doori, int Doorj, int Step)
{
int i, Newi, Newj;
int Temp;
if (flag == 1)
return;
if (Starti == Doori && Startj == Doorj && Step == T)
{
flag = 1;
}
Temp = T - Step - abs(Starti - Doori) - abs(Startj - Doorj);
if (Temp < 0 || Temp & 1)
{
return;
}
for (i = 0; i < 4; i++)
{
Newi = Starti + Dir[i][0];
Newj = Startj + Dir[i][1];
if (Trap[Newi][Newj] != 'X')
{
Trap[Newi][Newj] = 'X';
DFS(Newi, Newj, Doori, Doorj, Step + 1);
Trap[Newi][Newj] = '.';
}
}
}
这个AC了,错的很搞笑
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int DFS(int Start, int Startj, int Step);
char Trap[10][10];
int Doori, Doorj;
int N, M, T;
int flag;
int main()
{
//char Trap[8][8];
int i, j;
int Starti=0, Startj=0;
char temp[10];
while ((scanf("%d%d%d", &N, &M, &T)) != EOF && !(N == 0 && M == 0 && T == 0))
{
flag = 0;
for (i = 0; i <= N + 1; i++)
{
Trap[i][0] = Trap[i][M + 1] = 'X';
}
for (j = 1; j <= M; j++)
{
Trap[0][j] = Trap[N + 1][j] = 'X';
}
for (i = 1; i <= N; i++)
{
scanf("%s", temp);
for (j = 1; j <= M; j++)
{
Trap[i][j] = temp[j - 1];
if (Trap[i][j] == 'S')
{
Starti = i;
Startj = j;
}
else if (Trap[i][j] == 'D')
{
Doori = i;
Doorj = j;
}
}
}
flag = DFS(Starti, Startj, T);
if (flag == 1)
{
printf("YES\n");
}
else if (flag == 0)
{
printf("NO\n");
}
}
return 0;
}
int DFS(int Starti, int Startj, int T)
{
int Temp;
char TempS=Trap[Starti][Startj];
if (Starti == Doori && Startj == Doorj && T == 0)
{
return 1;
}
Temp = T - abs(Starti - Doori) - abs(Startj - Doorj);
if (Temp % 2 != 0 || Temp < 0)//关键错误在这里 原来是&& 呵呵 呵呵 呵呵呵呵!!!
{
return 0;
}
Trap[Starti][Startj] = 'X';
if (Trap[Starti - 1][Startj] != 'X' && DFS(Starti - 1, Startj, T - 1))
{
return 1;
}
if (Trap[Starti + 1][Startj] != 'X' && DFS(Starti + 1, Startj, T - 1))
{
return 1;
}
if (Trap[Starti][Startj - 1] != 'X' && DFS(Starti, Startj - 1, T - 1))
{
return 1;
}
if (Trap[Starti][Startj + 1] != 'X' && DFS(Starti, Startj + 1, T - 1))
{
return 1;
}
Trap[Starti][Startj]=TempS;
return 0;
}