日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷 P1101 单词方阵

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 P1101 单词方阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DFS的例題,難點在于所選的yizhong必須是一行的不能拐彎,我第一次寫的時候直接在DFS里的判斷條件里加了if(當前位置的字符==yizhong相應位置的字符)這樣的語句,當然這樣不對,因為沒有保證拐彎的問題。怎樣去保證不拐彎呢,只需要定義一個八向的二維數組,然后尋找到y的時候再去找i找到i就把這個k傳入進DFS以后方向就是這個k。因為已經定好了方向所以不用擔心越界重復等問題,如果有問題直接return不會在相應的記錄狀態數組上記錄。還有的問題就是要用char的二維數組我不知道為什么用string一個for一直錯,讓我還以為是算法錯了

經過試驗發現數組可以保證有負數的下標而不終止程序,string不能忍受,所以在最開始的時候用string就會出現負數的下標

代碼 (算法借鑒)

#include <bits/stdc++.h> using namespace std; int bk[110][110]; char st[110][110]; int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; char yz[]="yizhong"; struct node {int x,y; }p[110]; void dfs(int x,int y,int id,int k) {if(id==7){for(int i=0;i<7;i++)bk[p[i].x][p[i].y]=1;}else{int xx=x+dir[k][0];int yy=y+dir[k][1];if(id==6||st[xx][yy]==yz[id+1]){p[id].x=x;p[id].y=y;dfs(xx,yy,id+1,k);}} } main() {//freopen("data.in","r",stdin); int n;cin>>n;for(int i=0;i<n;i++)cin>>st[i];for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(st[i][j]=='y'){for(int k=0;k<8;k++){int x=i+dir[k][0];int y=j+dir[k][1];if(st[x][y]=='i')dfs(i,j,0,k);}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(bk[i][j])cout<<st[i][j];elsecout<<"*";}cout<<endl;} }

轉載于:https://www.cnblogs.com/baccano-acmer/p/9831769.html

總結

以上是生活随笔為你收集整理的洛谷 P1101 单词方阵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。