• 13B:回文子串


    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    给定一个字符串,寻找并输出字符串中最长回文子串。回文串即从左到右和从右到左读都一样的字符串。
    如果字符串中包含多个回文子串,则返回第一个。

    输入
    第一行是整数n,字符串的个数(n < 20)
    输出
    接下来n行,每行一个字符串
    字符串的长度不超过100
    样例输入
    3
    ab
    babadec
    scdedcd
    
    样例输出
    a
    bab
    cdedc
     1 #include<iostream>
     2 #include<queue>
     3 #include<cstring>
     4 using namespace std;
     5 char a[12][12];
     6 struct node{
     7     int x, y, step;
     8     node(int xx, int yy, int ss):x(xx),y(yy),step(ss){}
     9 };
    10 bool vis[12][12];
    11 int dirx[4] = {0,0,1,-1};
    12 int diry[4] = {1,-1,0,0};
    13 int main(){
    14     int k;
    15     cin>>k;
    16     while(k--){
    17         int m, T;
    18         cin>>m>>T;
    19         int i, j;
    20         int sx, sy;
    21         memset(vis, 0, sizeof(vis));
    22         memset(a,0,sizeof(a));
    23         queue<node>q;
    24         for(i = 1; i <= m; i++)
    25             for(j = 1; j <= m; j++){
    26                 cin>>a[i][j];
    27                 if(a[i][j]=='S'){
    28                     sx = i, sy = j;
    29                 }
    30             }
    31         q.push(node(sx,sy,0));
    32         vis[sx][sy] = true;
    33         bool flag = false;
    34         while(!q.empty()){
    35             node no = q.front();
    36             q.pop();
    37             if(a[no.x][no.y]=='E'){
    38                 if(no.step<=T){
    39                     cout<<"YES"<<endl;
    40                     flag = true;
    41                 }
    42                 break;
    43             }
    44             for(int i = 0; i < 4; i++){
    45                 int nx = no.x+dirx[i];
    46                 int ny = no.y+diry[i];
    47                 if((a[nx][ny]=='.'||a[nx][ny]=='E')&&!vis[nx][ny]){
    48                     q.push(node(nx,ny,no.step+1));
    49                     vis[nx][ny] = true;
    50                 }
    51             }
    52         }
    53         if(!flag) cout<<"NO"<<endl;
    54     } 
    55     return 0;
    56 }

    备注:又是一道BFS水题。要养成把队列放在循环里面来声明的好习惯,要不然总是忘了清空orz

  • 相关阅读:
    CSS 文本
    javascript:void(0)的问题
    剑指offer
    牛课--C/C++
    Linux学习--第二波
    面经-csdn
    初学Linux
    二分查找法的实现和应用汇总
    vs2013下git的使用
    win10+vs2013+Qt5.4 安装方法
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/13161649.html
Copyright © 2020-2023  润新知