1. 程式人生 > >【題解】洛谷P1101單詞方陣 dfs

【題解】洛谷P1101單詞方陣 dfs

題目連結 在這裡插入圖片描述 在這裡插入圖片描述

#include<cstdio>
#include<iostream>
using namespace std;
const char cmp[7]="izhong";
const int nx[]={0,1,1,1,-1,-1,-1,0},ny[]={1,1,0,-1,1,0,-1,-1};
int n,vis[110][110];
char s[110][110];
void path(int x,int y,int step,int d)
{
	if(step>=7)return;
	vis[x][y]=1;
	x+=nx[d],y+=ny[d];
	path(x,y,step+1,d);
}
void dfs(int x,int y,int step,int d)
{
	if(x<0||x>n||y<0||y>n)return;
	if(step>=6)
	{
		path(x,y,0,7-d);
		return;
	}
	x+=nx[d],y+=ny[d];
	if(s[x][y]!=cmp[step])return;
	dfs(x,y,step+1,d);
}
void judge(int x,int y)
{
	for(int i=0;i<8;i++)dfs(x,y,0,i);
}
int main()
{
	//freopen("in.txt","r",stdin);
	std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
	        cin>>s[i][j];
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
	        if(s[i][j]=='y')
			    judge(i,j);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		    if(vis[i][j])cout<<s[i][j];
		    else cout<<"*";
		cout<<endl;
	}
	return 0;
}

總結

一直寫不好dfs……炸半天后發現自己nxny陣列錯了???