求助!!!
查看原帖
求助!!!
1229219
szlyf2011楼主2024/10/4 15:07
#include<bits/stdc++.h>
using namespace std;
string s;
int n,m,l,ans=0,vis[105][105],fx[9][2]={{0,0},{-1,0},{0,-1},{1,0},{0,1},{-1,-1},{1,-1},{1,1},{-1,1}};
char a[105][105];
void dfs(int x,int y,int fa,int p,int len){
	if(len >= l){ ans++; return; }
	if(fa == 0){
		for(int i = 1;i <= 8;i++){
			int nx = x + fx[i][0],ny = y + fx[i][1];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len]==a[x][y]) dfs(x,y,i,p,len+1);
		}
	}
	else{
		int nx = x + fx[fa][0],ny = y + fx[fa][1];
		if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,fa,p,len+1);
		int t;
		if(p == 1){
			t = fa+1; if(t == 5 || t == 9) t -= 4;
			nx = x + fx[t][0],ny = y + fx[t][1];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,t,0,len+1);
			
			t = fa-1; if(t == 0 || t == 4) t += 4;
			nx = x + fx[t][0],ny = y + fx[t][1];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&s[len] == a[nx][ny]) dfs(nx,ny,t,0,len+1);
		}
	}
}
int main(){
	cin >> s;
	l = s.length();
	cin >> n >> m;
	for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) cin >> a[i][j];
	for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) if(a[i][j] == s[0]) dfs(i,j,0,1,1);
	cout << ans << endl;
	return 0;
}
2024/10/4 15:07
加载中...