一、kotori 和气球
题目解析
这道题,有
n种气球,每一种气球有无数多个;现在我们需要将这些气球摆成一排,但是,如果相邻的气球是相同的就会发生爆炸(也就是说,相同的气球相邻的摆法是不合法的);现在我们要求将气球摆成一排
m个一共有多少种摆法;最终结果可能数据过大,我们输出最终结果对于10^9取模的结果即可。
算法思路
这道题整体来说还是比较简单的:
我们摆放第一个气球时,我们可以随便选取一个气球,那也就有 n 种可能;
当我们摆放第二个以及后面的气球时,我们不能摆放与上一个气球相同的气球,那也就有 n-1 种可能。
所以,我们最终结果就等于:n * (n-1)^(m-1)。
代码实现
这里通过查看数据范围我们可以发现:在运算的时候数据就可能超出范围,所以在运算的过程中就进行 %1000000000 操作。
#include<iostream>
using namespace std;
int main(){
int n,m; cin>>n>>m;
long long ret = n;
for(int i =1;i < m;i++){
ret *=(n-1);
ret %=1000000000;
}
cout << ret << endl;
return 0;
}
二、走迷宫
题目解析
对于这道题,题目给定一个
n*m规模的二维字符数组,每一个位置是*或者.(其中*表示当前位置有障碍物,.表示当前位置没有障碍物)再给定
(x1, y1),(x2, y2)两个位置,然后让我们求从(x1 , y1)到(x2 , y2)最少的移动次数;我们每次可以向上、向下、向左或者向右移动一格
算法思路
这道题很明显就是一个搜索类的题目了,所以这里就直接说思路了:
广度优先遍历 bfs:
从
(x1 , y1)位置开始广度优先遍历,每次向四周移动一步,直到走到(x2 , y2)位置或者 走完所有能到达的位置。这里我们需要记录一下某一个位置是否到达过,所以这里可以使用已发同等规模的二维数组 来记录某一个位置是否到达过;


