睿抗-2025年江西省第三题
输入样例1:
2 3
sns
euk
输入样例2:
5 7
skunsek
nukesnu
ukeseku
nsnnesn
uekukku
输入样例3:
2 2
ab
cd
解题思路:
用递归的思想,它有一个顺序s->n->u->k->e->s->......,那么通过判断目前这个字符是哪个字母,是这其中(s,n,u,k,e)的,假设该字符是s,再判断其四周有无n,其它类似,若不是(s,n,u,k,e)之中的或其四周无对应字母,则是false,直到目前字母到达字符串的右下角,则为true。
下面是对应的递归函数:
bool adjust(char array[500][500],long long a,long long b,long long h,long long w){cout<<array[h][w]<<endl;if(h==a-1&&w==b-1){return true;}else{if(array[h][w]=='s'){if(h+1<a&&array[h+1][w]=='n'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='n'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='n'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='n'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='n'){if(h+1<a&&array[h+1][w]=='u'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='u'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='u'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='u'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='u'){if(h+1<a&&array[h+1][w]=='k'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='k'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='k'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='k'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='k'){if(h+1<a&&array[h+1][w]=='e'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='e'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='e'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='e'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='e'){if(h+1<a&&array[h+1][w]=='s'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='s'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='s'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='s'){return adjust(array,a,b,h,w-1);}}return false;}
}
总体代码为:
#include<bits/stdc++.h>
using namespace std;
bool adjust(char array[500][500],long long a,long long b,long long h,long long w){cout<<array[h][w]<<endl;if(h==a-1&&w==b-1){return true;}else{if(array[h][w]=='s'){if(h+1<a&&array[h+1][w]=='n'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='n'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='n'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='n'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='n'){if(h+1<a&&array[h+1][w]=='u'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='u'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='u'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='u'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='u'){if(h+1<a&&array[h+1][w]=='k'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='k'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='k'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='k'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='k'){if(h+1<a&&array[h+1][w]=='e'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='e'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='e'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='e'){return adjust(array,a,b,h,w-1);}}if(array[h][w]=='e'){if(h+1<a&&array[h+1][w]=='s'){return adjust(array,a,b,h+1,w);}if(w+1<b&&array[h][w+1]=='s'){return adjust(array,a,b,h,w+1);}if(h-1>=0&&array[h-1][w]=='s'){return adjust(array,a,b,h-1,w);}if(w-1>=0&&array[h][w-1]=='s'){return adjust(array,a,b,h,w-1);}}return false;}
}
int main(){long long a,b;cin>>a>>b;char array[500][500];for(long long i=0;i<a;i++){for(long long j=0;j<b;j++){cin>>array[i][j];}}bool h=adjust(array,a,b,0,0);if(h){cout<<"Yes";}else{cout<<"No";}return 0;
}//2 3
//sns
//euk//5 7
//skunsek
//nukesnu
//ukeseku
//nsnnesn
//uekukku//2 2
//ab
//cd
这题我在比赛因种种原因,未做出,现在这个解题步骤相当于回顾,可能会有一定问题。欢迎提出!