• test1.A[【dfs简单题】


    Test1.A

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述   

    sdut 2274:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2274

    给定一个2行n列的棋盘,从上到下行号为1..2,从左到右列号为1..n。有些格子可走,有些格子不可走。可走的格子用'.'表示,不可走的格子用'W'表示。现在路人甲想从格子(1,1)走到格子(1,n),问是否可以走到,如果可以,输出'YES',否则输出'NO'。(仅可以向相邻的且有公共点的可走格子移动)

    输入

     第一行包含一个整数T,表示测试数据的组数。
    每组数据第一行仅包含一个整数n,表示有多少列。(n<=100)
    每组数据第二到第三行每行包含n个字符,仅含.和W,表示棋盘。
    数据保证第一列和最后一列的格子均为.。

    输出

     每组数据的输出占一行。
    如果可以从(1,1)到(1,n),则输入YES,否则输出NO。

    示例输入

    1
    3
    .W.
    .W.

    示例输出

    NO
     1 #include<iostream>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<stdio.h>
     5 using namespace std;
     6 int flag;
     7 char f[3][104];
     8 int visited[3][104];
     9 int hang[8]= {0,-1,-1,-1,0,1,1,1};
    10 int  lie[8]= {-1,-1,0,1,1,1,0-1};
    11 int n;
    12 void dfs(int h,int l)
    13 {
    14     visited[h][l]=1;
    15     int i;
    16     for(i=0; i<=7; i++)
    17     {
    18         int h1=h+hang[i];
    19         int l1=l+lie[i];
    20         if(h1>=1&&h1<=2&&l1>=1&&l1<=n)
    21             if(f[h1][l1]=='.'&&visited[h1][l1]==0)
    22             {
    23                 if(h==1&&l==n)
    24                 {
    25                     flag=1;
    26                     return ;
    27                 }
    28                 else
    29                     dfs(h1,l1);
    30             }
    31     }
    32     visited[h][l]=0;
    33 }
    34 int main()
    35 {
    36     int zong ;
    37     cin>>zong;
    38     while(zong--)
    39     {
    40         int i,j;
    41         flag=0;
    42         memset(&f,'W',sizeof(f));
    43         memset(&visited,0,sizeof(visited));
    44         cin>>n;
    45         for(i=1; i<=2; i++)
    46         {
    47             for(j=1; j<=n; j++)
    48                 cin>>f[i][j];
    49             fflush(stdin);
    50         }
    51         dfs(1,1);
    52         if(flag==1)cout<<"YES"<<endl;
    53         else cout<<"NO"<<endl;
    54     }
    55     return 0;
    56 }
    View Code

    本题应该注意的是八个方向的问题。

  • 相关阅读:
    Swift 编程语言新手教程
    标准差(standard deviation)和标准错误(standard error)你能解释一下?
    shell文字过滤程序(十一):paste命令
    java 获取系统变量(环境变量和环境变量)
    MD5算法原理
    受托停止事件冒泡
    搜索引擎优化要领:8条辅助技巧(三)
    几种更新(Update语句)查询的方法
    学习盲点
    2014年同年CFA考试中哪些CFA资料没有变化?
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3331780.html
Copyright © 2020-2023  润新知