Word Maze(单词迷宫)

#include <iostream>
#include <string>
#include <stack>
using namespace std;
int m,n,len;
bool **visited;
string word ,*MyMap;
struct  MyPoint
{
    int row;
    int col;
};

bool fun(int cur ,MyPoint p)
{
    if (len == cur) //当先cur 等于单词的长度,则找到了。否则在点p的上下左右找单词中对应的下一个点并加到栈 sMP 中
    {
        return true;
    }
    stack<MyPoint> sMP;
    if (p.col-1>=0 && (!visited[p.row][p.col-1]) && word[cur] ==MyMap[p.row][p.col-1])
    {
        MyPoint mp;
        mp.row = p.row;
        mp.col = p.col-1;
        sMP.push(mp);
    }

    if (p.col+1<m && (!visited[p.row][p.col+1])&& word[cur] ==MyMap[p.row][p.col+1])
    {
        MyPoint mp;
        mp.row = p.row;
        mp.col = p.col+1;
        sMP.push(mp);
    }

    if (p.row-1>=0 && (!visited[p.row-1][p.col])&& word[cur] ==MyMap[p.row-1][p.col])
    {
        MyPoint mp;
        mp.row = p.row-1;
        mp.col = p.col;
        sMP.push(mp);
    }

    if (p.row+1<n && (!visited[p.row+1][p.col])&& word[cur] ==MyMap[p.row+1][p.col])
    {
        MyPoint mp;
        mp.row = p.row+1;
        mp.col = p.col;
        sMP.push(mp);
    }


    while(!sMP.empty()) //栈不为空的话就继续找
    {
        MyPoint mp = sMP.top();
        visited[mp.row][mp.col]=true; // 将字母设置为访问过
        if(!fun(cur+1,mp)) //判断以点mp对应的字母继续往下查找 是否能找到下一个对应的字母
        {
            visited[mp.row][mp.col]=false; //如果找不到 将mp 对应的字母设置为没有访问
            sMP.pop();// 将mp弹出栈

        }else
        {
            return true;// 找到的话返回true

        }
    }
    return false; //栈为空 还没找到的话 返回false
}
int main()
{

    while(cin>>m>>n)
    {
        visited = new bool*[n];
        for (int i=0;i<n;i++)
        {
            visited[i] = new bool[m];
        }

        for (int i=0;i<n;i++)
        {
            for(int j=0; j<m; j++)
            {
                visited[i][j]=false;
            }
        }


        cin>>word; // 单词
        len = word.length();
        MyMap = new string[n]; //字母表
        for(int i=0;i<n;i++)
        {
            cin>>MyMap[i];
        }


        stack<MyPoint> sMP;
        for (int i=0; i<n; i++) //将单词的第一个字母相同的字母表对应的点加到栈里
        {
            for (int j=0; j<m; j++)
            {
                if (word[0] == MyMap[i][j])
                {
                    MyPoint mp;
                    mp.row = i;
                    mp.col = j;
                    sMP.push(mp);

                }
            }
        }

        while(!sMP.empty())
        {
            MyPoint mp = sMP.top();
            visited[mp.row][mp.col]=true;
            if(!fun(0+1,mp))
            {
                visited[mp.row][mp.col]=false;
                sMP.pop();

            }else
            {
                cout<<"YES"<<endl;
                getchar();
                return 0;

            }
        }

        cout<<"NO"<<endl;
        getchar();
        return 0;

    }
}

5 5

SOLQ

CSUCY
EOQLH
COSOL
EKLQQ
PGRBC

按照单词顺序 在字母迷宫里找对应的单词,每个字母只能走一次

当然可以!Python非常适合编写各种有趣的小项目和编程示例。以下是一些建议: 1. **迷宫游戏** - 使用递归或者图形库(如pygame)创建一个简单的命令行迷宫游戏。 ```python import random # 迷宫生成器 def create_maze(width, height): maze = [['#' for _ in range(width)] for _ in range(height)] start = (0, random.randint(1, height-2)) end = (width - 1, random.randint(1, height-2)) def carve_path(x, y): directions = [(x+1, y), (x-1, y), (x, y+1), (x, y-1)] random.shuffle(directions) for dx, dy in directions: if 0 <= dx < width and 0 <= dy < height and maze[dx][dy] == '#': maze[x][y], maze[dx][dy] = ' ', '#' carve_path(dx, dy) carve_path(*start) maze[start[1]][start[0]] = 'S' maze[end[1]][end[0]] = 'E' return maze # 示例打印迷宫 maze = create_maze(20, 20) for row in maze: print(' '.join(row)) ``` 2. **ASCII艺术生成器** - 输入一个单词或句子,将其转换为ASCII字符的艺术形式。 ```python def ascii_art(word): art_dict = {"a": " * ", "b": " /\\ ", "c": " | | ", ...} # 更多字形替换 return ''.join([art_dict.get(c, '.') for c in word]) word = input("请输入单词:") print(ascii_art(word.upper())) ``` 3. **天气预报应用** - 使用第三方API获取实时天气信息并显示。 ```python import requests def get_weather(city): api_key = "your_api_key" # 替换为实际API key url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" response = requests.get(url) data = response.json() # 处理返回数据并显示 ... city_name = input("请输入城市名:") get_weather(city_name) ``` 4. **数字猜谜游戏** - 程序随机选择一个数字,让用户尝试猜测。 ```python import random number = random.randint(1, 100) guesses_taken = 0 while True: guess = int(input("猜一个1到100之间的数字: ")) guesses_taken += 1 if guess < number: print("太低了!") elif guess > number: print("太高了!") else: break print(f"恭喜! 你在第{guesses_taken}次猜对了,答案是 {number}.") ``` 以上这些只是冰山一角,Python的世界非常丰富,你可以根据自己的兴趣扩展和定制更多项目。想继续深入哪个方向呢?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值