P1278 单词游戏 超级简单的DFS

本文介绍了一种使用C++中的深度优先搜索(DFS)算法解决字符串问题的方法,通过添加减枝优化,以求解特定的单词游戏,时间复杂度控制在4e7以内。
摘要由CSDN通过智能技术生成

P1278 单词游戏

入场券:写完了 DFS 只有 70 70 70
我们只需加一个小小的减枝

#include<bits/stdc++.h>
using namespace std;
int n;
string s[20];
bool vis[20];
int mx;
int tot;
void dfs(int step,int len){
	tot++;
	if(tot>4e7) return ;//注意这里
	vis[step]=1;
	mx=max(mx,len);
	for(int i=1;i<=n;i++){
		if(!vis[i] && s[i][0]==s[step][s[step].size()-1]){
			dfs(i,len+s[i].size());
			vis[i]=0;
		}
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) cin>>s[i];
	for(int i=1;i<=n;i++){
		dfs(i,s[i].size());
		vis[i]=0;
	}
	printf("%d",mx);
	return 0;
}

完结撒花 ^ 0 ^

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的猜单词游戏代码Python示例: ```python import random # 定义单词列表 WORDS = ['apple', 'orange', 'banana', 'pear', 'grape', 'peach'] # 随机选取一个单词 word = random.choice(WORDS) # 初始化未猜中的字母列表 remaining_letters = list(word) # 初始化猜测结果列表,同样长度的下划线 guesses = ['_' for _ in word] # 定义猜测函数 def guess_letter(): # 输出未猜中的字母列表 print('Remaining letters:', ' '.join(remaining_letters)) # 输出当前猜测结果列表 print('Current guess:', ' '.join(guesses)) # 告知玩家剩余可猜测次数 print('You have', chances, 'chances left.') # 获取玩家输入 letter = input('Guess a letter: ').lower() # 检查是否为单个字母 if not letter.isalpha() or len(letter) != 1: print('Please enter a single letter.') return False # 检查是否已经猜过该字母 if letter in remaining_letters: remaining_letters.remove(letter) else: print('You already guessed that letter.') return False # 检查是否为正确的猜测 found = False for i, c in enumerate(word): if c == letter: guesses[i] = letter found = True if not found: print('Incorrect guess.') return False # 检查是否已经猜中所有字母 if '_' not in guesses: print(word) print('Congratulations, you win!') return True else: return False # 主循环 chances = 6 while chances > 0: if guess_letter(): break chances -= 1 # 游戏结束提示 if chances == 0: print('You lose! The word was', word) ``` 运行该代码后,将会得到如下游戏界面: ``` Remaining letters: o r a n g e Current guess: _ _ _ _ _ _ You have 6 chances left. Guess a letter: e Remaining letters: o r a n g Current guess: _ _ _ _ e _ You have 6 chances left. Guess a letter: x Remaining letters: o r a n g Current guess: _ _ _ _ e _ You have 5 chances left. Guess a letter: r Remaining letters: o a n g Current guess: _ _ r _ e _ You have 5 chances left. Guess a letter: g Remaining letters: o a n Current guess: _ _ r _ e _ You have 5 chances left. Guess a letter: p Remaining letters: o a n Current guess: _ _ r _ e _ You have 4 chances left. Guess a letter: o Remaining letters: a n Current guess: _ _ r o e _ You have 4 chances left. Guess a letter: n Remaining letters: a Current guess: _ _ r o n e You have 4 chances left. Guess a letter: a You already guessed that letter. Remaining letters: a Current guess: _ _ r o n e You have 4 chances left. Guess a letter: q Incorrect guess. Remaining letters: a Current guess: _ _ r o n e You have 3 chances left. Guess a letter: t Incorrect guess. Remaining letters: a Current guess: _ _ r o n e You have 2 chances left. Guess a letter: y Incorrect guess. Remaining letters: a Current guess: _ _ r o n e You have 1 chances left. Guess a letter: s Incorrect guess. You lose! The word was orange ``` 在游戏中,玩家每次输入一个字母作为猜测,程序会告诉玩家剩余可猜测次数,并且经过判断,输出当前猜测结果,一直到猜中单词或者猜测次数用完结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值