题目链接
这个dfs题目还不错,我做了好久呢
用一个数组来存储结果,如果成功发现一个单词,把数组的相应值设置为单词的下标,回头遍历数组即可。
import java.util.*;
import java.math.*;
public class Main {
public static int dx[]={1,-1,0,0,1,1,-1,-1},dy[]={0,0,-1,1,-1,1,1,-1};
public static char[] s={'y','i','z','h','o','n','g'};
public static int[][] rec;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
rec=new int[n][n];
sc.nextLine();
char[][] map=new char[n][n];
for(int i=0;i<n;i++){
String s=sc.nextLine();
map[i]=s.toCharArray();
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(map[i][j]=='y')
for(int k=0;k<8;k++)
dfs(i,j,k,1,map);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(rec[i][j]!=0)
System.out.print(s[rec[i][j]-1]);
else
System.out.print('*');
}
System.out.println();
}
}
public static void dfs(int x,int y,int dir,int cur,char[][] map){
int n=map.length;
if(x<0||y<0||x==n||y==n||map[x][y]!=s[cur-1])
return;
if(cur==7&&map[x][y]=='g'){
int j=1;
for(int i=6;i>=0;i--){
rec[x-i*dx[dir]][y-i*dy[dir]]=j;
j++;
}
return;
}
dfs(x+dx[dir],y+dy[dir],dir,cur+1,map);
}
}