hdoj1010

起点设为(sx,sy),终点为(dx,dy),理解为一副棋盘,两点间最短路径minstep = abs(sx-dx) + abs(sy-dy)

则 minstep <= T , 

并且 T - minstep 必定为偶数,(-。-;)怎么数学证明呢......

利用这些条件就可以提前判断一些不满足上述条件的用例。

DFS

但是还是WA了,查了好久才看到有人说可能是数据不一定是M*N行的矩阵形式,可能是一行,醉了......只好用cin,cin对于字符变量,会自动跳过换行符,所以就解决了可能有换行的问题。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<iostream>
 4 using namespace std;
 5 char maze[7][7] ;
 6 int m , n , t , sx , sy , dx , dy , minstep ;
 7 
 8 bool DFS(int sx , int sy , int step)
 9 {
10     if(sx == dx && sy == dy && step == 0)
11     {
12         return true ;
13     }
14     if(sx < 0 || sx >= n || sy < 0 || sy >= m || maze[sx][sy] == 'X' || step == -1)
15     {
16         return false ;
17     }
18     maze[sx][sy] = 'X' ;
19     if(DFS(sx-1 , sy , step-1) || DFS(sx+1 , sy , step-1) || DFS(sx , sy-1 , step-1) || DFS(sx , sy+1 , step-1))
20     {
21         return true ;
22     }
23     maze[sx][sy] = '.' ;
24     return false ;
25 }
26 
27 int main()
28 {
29     int i , j , np ;
30     while(scanf("%d %d %d" , &m , &n ,&t) && m && n && t)
31     {
32         np = 0 ;
33         for(i = 0 ; i < n ; ++i)
34         {
35             for(j = 0 ; j < m ; ++j)
36             {
37                 cin>>maze[i][j] ;
38                 if(maze[i][j] == '.')
39                 {
40                     ++np ;
41                 }
42                 else if(maze[i][j] == 'S')
43                 {
44                     sx = i ;
45                     sy = j ;
46                 }
47                 else if(maze[i][j] == 'D')
48                 {
49                     dx = i ;
50                     dy = j ;
51                 }
52             }
53         }
54         minstep = abs(sx-dx) + abs(sy-dy) ;
55         if(minstep > t || (t - minstep)%2 != 0 || t - 1 > np)
56         {
57             printf("NO\n") ;
58             continue ;
59         }
60         if(DFS(sx , sy , t))
61             printf("YES\n") ;
62         else
63             printf("NO\n") ;
64 
65     }
66     return 0 ;
67 }

 

posted @ 2016-03-27 22:37  杨文的博客  阅读(117)  评论(0)    收藏  举报