【題解】洛谷P1101單詞方陣 dfs
阿新 • • 發佈:2018-12-13
#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陣列錯了???