封印之门

 H.封印之门

蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手。幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印。

封印之门上有一串文字,只包含小写字母,有 k 种操作规则,每个规则可以把一个字符变换成另外一个字符。经过任意多次操作以后,最后如果能把封印之门上的文字变换成解开封印之门的文字,封印之门将会开启。

蒜头君战斗力超强,但是不擅计算,请你帮忙蒜头君计算至少需要操作多少次才能解开封印之门。

输入格式

输入第一行一个字符串,长度不大于 1000,只包含小写字母,表示封印之门上的文字。

输入第二行一个字符串,只包含小写字母,保证长度和第一个字符串相等,表示能解开封印之门的文字。

输入第三行一个整数 k(0k676)

接下来 k 行,每行输出两个空格隔开的字符 ab,表示一次操作能把字符 a 变换成字符 b

输出格式

如果蒜头君能开启封印之门,输出最少的操作次数。否则输出一行 −1

样例输入
abcd
dddd
3
a b
b c
c d
样例输出
6

问题思路:用Floyd把两个字母转换的最小次数求出来,不过有一个坑点,已标红,输入可能两点相同,靠

#include<bits/stdc++.h>
using namespace std;

const int inf = 0x3f3f3f3f;

int main()
{
	char s1[1010],s2[1010];
	int a[30][30];
	char x,y;
	int n;
	
	memset(s1,0,sizeof(s1));
	memset(s2,0,sizeof(s2));
	
	cin >> s1 >> s2;
	cin >> n;
	getchar();
	for(int i = 0; i <= 26; i++)
		for(int j = 0; j <= 26; j++)
			if (i != j)
				a[i][j] = inf;
			else	a[i][j] = 0;
			
	for(int i = 0; i < n; i++){
		cin >> x >> y;
		getchar();
		if (x != y)
			a[x-'a'][y-'a'] = 1;
	}
	
	for(int k = 0; k < 26; k++){
		for(int i = 0; i < 26; i++){
			for(int j = 0; j < 26; j++){
				if (i == j)
					continue;
				if (a[i][j] > a[i][k]+a[k][j])
					a[i][j] = a[i][k]+a[k][j];
			}
		}
	} 
	
	long long int sum = 0;
	for(int i = 0; i < strlen(s1); i++){
		sum += a[s1[i]-'a'][s2[i]-'a'];
	}
	if (sum < inf)
		cout << sum << endl;
	else	cout << "-1" << endl;
	return 0; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的问题。您需要创建一个企业应用程序,其中包括封面、主页面、固定Fragment和可动态添加的Fragment。以下是一些步骤和注意事项,供您参考: 1. 创建应用程序并添加封面页面 首先,您需要创建一个新的Android应用程序。然后,您可以按照您的要求创建一个封面页面,其中包含企业名称和一个按钮。您可以将按钮与主页面相关联,以便在用户单击按钮时切换到主页面。 在页面底部或顶部添加固定Fragment来显示Logo。为此,您需要创建一个布局文件来定义Fragment的外观,并使用Fragment子类的onCreateView方法来填充布局文件。最后,您需要在Activity的布局文件中部署<fragment>标签来将Fragment添加到Activity中。 2. 实现动态添加Fragment 为了实现动态添加Fragment,您需要在Activity的底部放置三个按钮,以便用户可以单击不同的按钮来显示不同的Fragment。然后,您需要创建三个Fragment布局文件和相关的Fragment类。 您可以使用FragmentManager和FragmentTransaction来动态添加Fragment。首先,您需要获取FragmentManager对象和FragmentTransaction对象。然后,您可以创建一个有名字的Fragment对象,并将其替换到指定的容器中。最后,您需要提交更改以使它们生效。 以下是实现动态添加Fragment的详细步骤: 2.1 在Activity中添加底部按钮 您应该在Activity的底部添加三个按钮,例如“列表”、“资讯”和“我的”按钮。添加按钮的最简单方法是将Button元素添加到布局文件中。 2.2 创建三个Fragment布局文件和相关的Fragment类 您需要创建三个Fragment布局文件,并创建相关的Fragment子类。可以使用Android Studio提供的向导来创建布局文件和类文件,或者手动创建它们。 2.3 添加默认显示的Fragment 在Activity启动时,您需要添加一个默认的Fragment。为此,您需要获取FragmentManager对象和FragmentTransaction对象,捕获容器对象并创建一个有名字的Fragment对象。然后,您可以使用FragmentTransaction对象的replace方法将Fragment对象替换到容器中。最后,您需要提交更改以使它们生效。 以下是示例代码: ``` FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); MyFragment fragment = new MyFragment(); fragmentTransaction.replace(R.id.fragment_container, fragment, "MY_FRAGMENT"); fragmentTransaction.commit(); ``` 3. 可选项 如果您想要添加底部导航栏,您可以使用BottomNavigationView来显示按钮,并使用ViewPager将多个Fragment组合在一起。使用BottomNavigationView和ViewPager,您可以轻松地实现可滑动的界面和动态添加Fragment的功能。 总之,这些步骤应该可以帮助您实现您所需的Android应用程序。如果您需要更详细的指导,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值