【洛谷P9303題解】AC- [CCC 2023 J5] CCC Word Hunt

在CCC單詞搜索游戲中,單詞隱藏在一個字母網格中。目標是確定給定單詞在網格中隱藏的次數。單詞可以以直線或直角的方式排列。以下是詳細的解題思路及代碼實現:

傳送門: https://www.luogu.com.cn/problem/P9303

解題思路

  1. 輸入讀取與初始化

    • 讀取要搜索的單詞和網格的行數、列數。
    • 將網格存儲為二維向量。
  2. 方向定義

    • 定義八個可能的搜索方向,包括上、右上、右、右下、下、左下、左、左上。
  3. 邊界檢查

    • 檢查給定的坐標是否在網格范圍內。
  4. 深度搜索

    • 從網格中每個與單詞首字母匹配的位置開始,向八個方向進行深度搜索。
    • 在搜索過程中,可以繼續沿當前方向或在未轉過彎的情況下沿垂直方向繼續搜索。
  5. 計數

    • 統計所有可能的單詞匹配方式,并輸出總的匹配次數。

代碼實現

#include <iostream>
#include <vector>
#include <string>using namespace std;int r, c;
string word;
int length;
vector<vector<string>> graph;// 定義八個可能的搜索方向
const int dx[8] = {-1,-1, 0, 1, 1, 1, 0,-1};
const int dy[8] = { 0, 1, 1, 1, 0,-1,-1,-1};// 檢查坐標是否在網格范圍內
bool good(int x, int y) {return x >= 0 && x < r && y >= 0 && y < c;
}// 深度搜索函數
int search(int x, int y, int cur, bool turned, int dirn) {if (cur == length - 1) return 1; // 找到完整匹配int cnt = 0;// 繼續沿當前方向搜索int nx = x + dx[dirn], ny = y + dy[dirn];if (good(nx, ny) && graph[nx][ny] == string(1, word[cur + 1])) {cnt += search(nx, ny, cur + 1, turned, dirn);}// 如果未轉過彎,嘗試沿垂直方向搜索if (!turned) {int turnDirs[2] = {(dirn + 2) % 8, (dirn + 6) % 8}; // 計算垂直方向for (int k = 0; k < 2; ++k) {int newDir = turnDirs[k];int tx = x + dx[newDir], ty = y + dy[newDir];if (good(tx, ty) && graph[tx][ty] == string(1, word[cur + 1])) {cnt += search(tx, ty, cur + 1, true, newDir);}}}return cnt;
}int main() {cin >> word;length = word.length();cin >> r >> c;// 初始化網格graph.resize(r, vector<string>(c));for (int i = 0; i < r; ++i)for (int j = 0; j < c; ++j)cin >> graph[i][j];int count = 0;// 遍歷網格,尋找所有可能的起點for (int i = 0; i < r; ++i) {for (int j = 0; j < c; ++j) {if (graph[i][j] == string(1, word[0])) { // 找到單詞首字母for (int k = 0; k < 8; ++k) { // 嘗試所有方向int ni = i + dx[k], nj = j + dy[k];if (good(ni, nj) && graph[ni][nj] == string(1, word[1])) { // 確保第二字母匹配count += search(ni, nj, 1, false, k); // 開始深度搜索}}}}}cout << count << endl; // 輸出結果return 0;
}

總結

以上代碼實現了對字母網格中單詞的搜索,能夠處理單詞以直線或直角方式排列的情況。通過深度搜索,代碼能夠有效地找出所有可能的匹配,并統計匹配次數。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81482.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LangGraph + LLM + stream_mode

文章目錄 LLM 代碼valuesmessagesupdatesmessages updatesmessages updates 2 LLM 代碼 from dataclasses import dataclassfrom langchain.chat_models import init_chat_model from langgraph.graph import StateGraph, STARTfrom langchain_openai import ChatOpenAI # 初…

Pydantic 學習與使用

Pydantic 學習與使用 在 Fastapi 的 Web 開發中的數據驗證通常都是在使用 Pydantic 來進行數據的校驗&#xff0c;本文將對 Pydantic 的使用方法做記錄與學習。 **簡介&#xff1a;**Pydantic 是一個在 Python 中用于數據驗證和解析的第三方庫&#xff0c;它現在是 Python 使…

批量文件重命名工具

分享一個自己使用 python 開發的小軟件&#xff0c;批量文件重命名工具&#xff0c;主要功能有批量中文轉拼音&#xff0c;簡繁體轉換&#xff0c;大小寫轉換&#xff0c;替換文件名&#xff0c;刪除指定字符&#xff0c;批量添加編號&#xff0c;添加前綴/后綴。同時還有文件時…

多語言視角下的 DOM 操作:從 JavaScript 到 Python、Java 與 C#

多語言視角下的 DOM 操作&#xff1a;從 JavaScript 到 Python、Java 與 C# 在 Web 開發中&#xff0c;文檔對象模型&#xff08;DOM&#xff09;是構建動態網頁的核心技術。它將 HTML/XML 文檔解析為樹形結構&#xff0c;允許開發者通過編程方式訪問和修改頁面內容、結構和樣…

【C/C++】紅黑樹學習筆記

文章目錄 紅黑樹1 基本概念1.1 定義1.2 基本特性推理1.3 對比1.4 延伸1.4.1 簡單判別是否是紅黑樹1.4.2 應用 2 插入2.1 插入結點默認紅色2.2 插入結點2.2.1 插入結點是根結點2.2.2 插入結點的叔叔是紅色2.2.3 插入結點的叔叔是黑色場景分析LL型RR型LR型RL型 3 構建4 示例代碼 …

網絡通信的基石:深入理解幀與報文

在這個萬物互聯的時代&#xff0c;我們每天都在享受著網絡帶來的便利——從早晨查看天氣預報&#xff0c;到工作中的視頻會議&#xff0c;再到晚上刷著短視頻放松。然而&#xff0c;在這些看似簡單的網絡交互背后&#xff0c;隱藏著精密而復雜的數據傳輸機制。今天&#xff0c;…

STM32 SPI通信(硬件)

一、SPI外設簡介 STM32內部集成了硬件SPI收發電路&#xff0c;可以由硬件自動執行時鐘生成、數據收發等功能&#xff0c;減輕CPU的負擔 可配置8位/16位數據幀、高位先行/低位先行 時鐘頻率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主機模型、主或從操作 可…

尚硅谷redis7-11-redis10大類型之總體概述

前提&#xff1a;我們說的數據類型一般是value的數據類型&#xff0c;key的類型都是字符串。 redis字符串【String】 string類型是二進制安全的,意思是redis的string可以包含任何數據,比如jpg圖片或者序列化的對象。 string類型是Redis最基本的數據類型,一個redis中字符串va…

【遞歸、搜索與回溯算法】專題一 遞歸

文章目錄 0.理解遞歸、搜索與回溯1.面試題 08.06.漢諾塔問題1.1 題目1.2 思路1.3 代碼 2. 合并兩個有序鏈表2.1 題目2.2 思路2.3 代碼 3.反轉鏈表3.1 題目3.2 思路3.3 代碼 4.兩兩交換鏈表中的節點4.1 題目4.2 思路4.3 代碼 5. Pow(x, n) - 快速冪5.1 題目5.2 思路5.3 代碼 0.理…

C#實現List導出CSV:深入解析完整方案

C#實現List導出CSV&#xff1a;深入解析完整方案 在數據交互場景中&#xff0c;CSV文件憑借其跨平臺兼容性和簡潔性&#xff0c;成為數據交換的重要載體。本文將基于C#反射機制實現的通用CSV導出方案&#xff0c;結合實際開發中的痛點&#xff0c;從基礎實現、深度優化到生產級…

字符串day7

344 反轉字符串 字符串理論上也是一個數組&#xff0c;因此只需要用雙指針即可 class Solution { public:void reverseString(vector<char>& s) {for(int i0,js.size()-1;i<j;i,j--){swap(s[i],s[j]);}} };541 反轉字符串 自己實現一個反轉從start到end的字符串…

Grafana XSSOpenRedirectSSRF漏洞復現(CVE-2025-4123)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…

私服 nexus 之間遷移 npm 倉庫

本文介紹如何將一個 Nexus 特定倉庫中的 npm 包內容遷移到另一個 Nexus 特定倉庫。此過程適用于需要重構倉庫結構或合并倉庫的場景。 遷移腳本 以下是完整的遷移腳本&#xff0c;它會自動完成以下操作&#xff1a; 從源倉庫獲取所有 npm 包列表下載每個包的 .tgz 文件解壓并…

Django ToDoWeb 服務

我們的任務是使用 Django 創建一個簡單的 ToDo 應用程序,允許用戶添加、查看和刪除筆記。我們將通過設置 Django 項目、創建 Todo 模型、設計表單和視圖來處理用戶輸入以及創建模板來顯示任務來構建它。我們將逐步實現核心功能以有效地管理 todo 項。 Django ToDoWeb 服務 …

阿里云服務器遭遇DDoS攻擊?低成本第三方高防解決方案全解析

阿里云服務器因高性能和穩定性備受青睞&#xff0c;但其DDoS高防服務的價格常讓中小企業望而卻步。面對動輒每月數萬元的防護成本&#xff0c;許多用戶不禁疑問&#xff1a;能否通過第三方高防服務保護阿里云服務器&#xff1f;如何實現低成本高效防御&#xff1f; 本文將結合技…

2025山東CCPC補題

2025山東CCPC補題 目錄 2025山東CCPC補題K - UNO&#xff01; &#xff08;雙端隊列的簡單應用&#xff09;M - 第九屆河北省大學生程序設計競賽 &#xff08;二進制枚舉模擬&#xff09;J - Generate 01 String 感覺這場比賽的題目挺不錯的&#xff1b;沒有說那些為了算法而算…

體繪制學習

一、基本概念 體繪制是對一個三維物體數據進行采樣與擬合的過程。 在體繪制中用vtkVolume渲染數據 渲染數據類數據轉換類幾何渲染vtkActorvtkPolyDataMapper體渲染vtkVolumevtkVolumeRayCastMapper 體繪制常用算法如下。 光線投射法。 優點是可視化結果質量好。缺點是計算…

告別“盤絲洞”車間:4-20mA無線傳輸如何重構工廠神經網?

4-20ma無線傳輸是利用無線模塊將傳統的溫度、壓力、液位等4-20mA電流信號轉換為無線信號進行傳輸。這一技術突破了有線傳輸的限制&#xff0c;使得信號可以在更廣泛的范圍內進行靈活、快速的傳遞&#xff0c;無線傳輸距離可達到50KM。達泰4-20ma無線傳輸模塊在實現工業現場應用…

VB.NET與SQL連接問題解決方案

1.基本連接步驟 使用SqlConnection、SqlCommand和SqlDataReader進行基礎操作&#xff1a; vb.net Imports System.Data.SqlClient Public Sub ConnectToDatabase() Dim connectionString As String "ServermyServerAddress;DatabasemyDataBase;Integrated Security…

ElasticSearch--DSL查詢語句

ElasticSearch DSL查詢文檔 分類 查詢類型功能描述典型應用場景示例語法查詢所有匹配所有文檔&#xff0c;無過濾條件數據預覽/測試json { "query": { "match_all": {} } }全文檢索查詢對文本字段分詞后匹配&#xff0c;基于倒排索引搜索框模糊匹配、多字段…