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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷P1101 单词方阵

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

一道簡單的利用dfs思想解決的水題,寫這篇文章只是為了懺悔為什么疫情在家學習的時候沒有好好學習數據結構以及大二沒有好好寫過題,導致快大四了還要重頭學數據結構(感謝我的老師讓我數據結構飄過)

這道題我大一上學期還沒開擺的時候就看過了,那時候數據結構、算法什么的基本一竅不通,只會一些簡單的c語言,連期末考試那道簡單的遞歸題目都做不出來orz

到了大三下學期,重新看這道題,覺得是如此的簡單...實在是為當初的擺爛后悔不已..也希望看到這篇文章的學弟學妹們不管是什么專業的,都要好好學習,是軟件/計算機專業的要好好學數據結構和算法,別等到大三了才來后悔,不要因為一時的困難就擺爛,擺爛是解決不了任何問題的

主要思想:用一個隊列保存矩陣里所有字符'y'的位置,然后依次出隊用dfs走迷宮的思想去判斷八個不同方向的字符串能否構成'yizhong'

完整代碼:

#include <iostream> #include <queue> typedef std::pair<int, int> pair;int n; char arr[105][105]; char ans[105][105];/*用字符矩陣保存結果,可不用字符矩陣,即使用bool矩陣判斷即可*/ const char* ch = "yizhong"; std::queue<pair> q; /*八個不同的方向判斷是否能構成'yizhong'這個字符串*/ int dx[8] = { -1,1,0,0,-1,-1,1,1 }; int dy[8] = { 0,0,-1,1,-1,1,-1,1 };int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {std::cin >> arr[i][j];if (arr[i][j] == 'y') q.push(pair(i, j));}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {ans[i][j] = '*';}}int k;int flag;while (!q.empty()) {pair p = q.front(); q.pop();for (int i = 0; i < 8; i++) {k = 1;/*flag存儲哪個方向的字符串可以匹配給定字符串*/flag = i;int nx = p.first;int ny = p.second;/*'y'已經是判斷好的了,只需要判斷'izhong'即可*/for (int j = 0; j < 6; j++) {nx += dx[i];ny += dy[i];/*如果當前字符匹配則繼續進行下一個字符匹配*/if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && arr[nx][ny] == ch[k]) k++;/*如果當前字符不匹配則設置flag為-1*/else if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && arr[nx][ny] != ch[k]) {flag = -1;break;}/*其他情況*/else {flag = -1;break;}}/*找到哪個方向可以之后就設置ans矩陣*/if (flag != -1) {int c = 1;ans[p.first][p.second] = 'y';int nx = p.first;int ny = p.second;for (int j = 0; j < 6; j++) {nx += dx[flag];ny += dy[flag];ans[nx][ny] = ch[c];c++;}}}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {printf("%c", ans[i][j]);}printf("\n");}return 0; }

總結

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

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