求助大佬们怎么按照一个方向去搜啊,我这个只能八个方向去搜
查看原帖
求助大佬们怎么按照一个方向去搜啊,我这个只能八个方向去搜
659596
woshisilong楼主2022/3/10 17:58
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N = 105;
bool stu[N][N];
char g[N][N];
char s[] = "yizhong";
PII pos[7];//存放满足字符的坐标
int dx[] ={-1,-1,0,1,1,1,0,-1},dy[] = {0,1,1,1,0,-1,-1,-1},n;

void set(){
	for (int i = 0;i < 7;i++){
		int x = pos[i].first,y = pos[i].second;
		stu[x][y] = true;
	}
}

void dfs(int x,int y,int idx){
	if (idx > 6){//满足条件 
		set();
		return; 
	}
	if (s[idx] != g[x][y]){//该方向不满足条件 
		return;
	}
	//越界 
	if (x < 0 || x >= n || y < 0 || y >= n)
		return;
	pos[idx] = make_pair(x,y);
	for (int i = 0;i < 8;i++){//遍历八个方向  
		int nx = x + dx[i],ny = y + dy[i];
		dfs(nx,ny,idx+1);
	}
	
}

int main(){
	cin >> n;
	for (int i = 0;i < n;i++)
		scanf("%s",&g[i]);
	
	for (int i = 0;i < n;i++)
		for (int j = 0;j < n;j++)
			if (g[i][j] == 'y')
				dfs(i,j,0);  
	for (int i = 0;i < n;i++){
		for (int j = 0;j < n;j++)
			if (stu[i][j])
				cout << g[i][j];
			else
				cout << "*" ;
		cout << endl;
	}
		
	return 0;
}
2022/3/10 17:58
加载中...