zoukankan      html  css  js  c++  java
  • 查找湖南问题

    skysun原创,转载请注明出处

    一、 查找湖南问题(hunan.pas)。

    有一个含有N×N(N<=20)的大写字母方阵,试编程找出其中隐含的所有“HUNAN”字样,五个字母只能以上下左右方向连续。

        输入:方阵由文本文件读入,文本文件第一行存放N的值,第二行开始依次存放各行的字母。

        输出:写入文件中,每一行一个方案,每行内容为方案中依次经过字符的行号和列号,若无法找到,则输出“NO ANSWER!”。

    输入输出举例:

    输入:input.TXT:     则输出output.TXT

      6                        NO.1  (1,2) (2,2) (3,2) (4,2) (4,1)

              AHUBBJ       NO.2  (1,2) (2,2) (3,2) (3,3) (3,4)

              UUKDAE       NO.3  (6,3) (6,4) (6,5) (6,6) (5,6)

              BNANNH

              NAANWA

              SPOUCN 

        RTHUNA

    {由于排版问题,格式不大美观,来源不详……自己在湖南的相关测试里找吧。。}

    细节问题大部分在程序里有注释

    输出优先级为使y坐标尽可能小,然后使x坐标尽可能小

    skysun原创转载请注明出处 http://www.cnblogs.com/skysun

     

    View Code
     1 program sky;
    2 var
    3 px : array[1..4] of longint=(0,-1,1,0);
    4 py : array[1..4] of longint=(-1,0,0,1);
    5 f : array[0..5,1..2] of longint;
    6 c : array[0..21,0..21] of char;
    7 i,j,n : longint;
    8 tot : longint;
    9 s : string[5];
    10 v : array[0..20,0..20] of boolean;
    11 {p 数组定义时方向顺序很重要}
    12 procedure dfs(x,y,k :longint );
    13 var
    14 i,j: longint;{淫荡的一个地方,j要是里面不开的话就死循环了......}
    15 begin
    16 for i:=1 to 4 do
    17 if c[x+px[i],y+py[i]]=s[k+1] then
    18 if not v[x+px[i],y+py[i]] then {v数组还是要的,不然因为‘HUNAN’第三位和第五位一样。会尴尬的。。}
    19 if k=4 then
    20 begin
    21 inc(tot);
    22 write('NO.',tot,' (');
    23 for j:=1 to 4 do write(f[j,1],',',f[j,2],') (');
    24 writeln(x+px[i],',',y+py[i],')');
    25 end else
    26 begin
    27 f[k+1,1]:=x+px[i]; f[k+1,2]:=y+py[i];{之前打错了啊。。。。。}
    28 v[x+px[i],y+py[i]]:=true;
    29 dfs(x+px[i],y+py[i],k+1);
    30 v[x+px[i],y+py[i]]:=false;
    31 end;
    32
    33 end;
    34 begin
    35 assign(input,'hunan.in'); reset(input);
    36 assign(output,'hunan.out'); rewrite(output);
    37 readln(n); s:='HUNAN';
    38 for i:=1 to n do
    39 begin
    40 for j:=1 to n do read(c[i,j]);
    41 readln;
    42 end;
    43 for i:=1 to n do
    44 for j:=1 to n do
    45 if c[j,i]='H' then
    46 begin
    47 f[1,1]:=j; f[1,2]:=i;
    48 dfs(j,i,1);
    49 end;
    50 if tot=0 then writeln('NO ANSWER!');
    51 close(input); close(output);
    52 end.

    至于题目解法,必然搜索吧 。就看怎么写更简洁,不爱出错了。

     

  • 相关阅读:
    Shiro配置文件ini详解
    Shiro配置文件ini详解
    [转]shiro基础教程
    [转]shiro基础教程
    arguments.callee的作用
    [转] C# WPF Unable to add event handler
    [转] C# WPF Unable to add event handler
    springmvcajax json对象 用Map接受
    springmvcajax json对象 用Map接受
    json 对象字符串相互转化, js中
  • 原文地址:https://www.cnblogs.com/skysun/p/2413828.html
Copyright © 2011-2022 走看看