洛谷 P1101 单词方阵 题解

洛谷 P1101 单词方阵 题解_第1张图片
这个题的思路类似走迷宫,都是在循环每个方向,看最终能不能找到解
自己写的答案很乱,看了洛谷一篇dalao的题解豁然开朗
这个题解的优秀之处在于 他不是盲目的寻找方向 而是先大概找到一个方向,再在这个方向上继续搜索,大大提高了效率

#include 
#define max_int 120
using namespace std;
//用一个二维数组保存方阵
//类似走迷宫 在找到点的8个方向上寻找下一个字母 如此重复

int n;
int vis[max_int][max_int] = {0};
char fz[max_int][max_int];
int mem[max_int][2];
int direct[8][2] = {{0,-1},{-1,-1},{1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0}};
string s = "yizhong";
void dfs(int x , int y,int cur,int k){
	 if(cur == 7){
	 	for(int i=0;i<7;i++){
	 		vis[mem[i][0]][mem[i][1]] =1;
		 }
	 }
	 else{
	 	int dx = x+direct[k][0];
	 	int dy = y + direct[k][1];
	 	if(cur == 6 || fz[dx][dy] == s[cur+1]){
	 		mem[cur][0] = x;
			mem[cur][1] = y;
			dfs(dx,dy,cur+1,k); 
		 }
	 }
}
int main(int argc, char** argv) {
	cin >> n;
	for(int i=0;i> fz[i][j];
		}
	}
	for(int i=0;i

你可能感兴趣的:(算法笔记)