1.深度优先搜索:暴力求解,适合判断能不能走出迷宫
利用递归,有一个check【】数组来检查该节点是否经过
for循环该节点的邻接节点(存在且没被访问),递归DFS(该节点的某个邻接节点)
DFS(初始顶点v,图...)
check[v] = 访问;
for(int i=0;i<n;i++){
if(邻接节点存在&&check【i】==未访问)
DFS(邻接点)
}
2.广度优先搜索:适合找最短路径,最短走出迷宫
有一个check【】数组来检查该节点是否经过
利用队列,当前节点被访问,它的邻接节点加入队列
BFS(接受初始顶点v,图)
{
访问v;
check[v] = 访问;
Queue.push(v)
while(queue不为空)
{
Queue.pop(v);
遍历v的邻接结点for(i.....)
{
if(邻接节点存在且未访问)
{
访问该节点;
check【i】 = 访问;
i入队
}
}
}
}
3.对于一个数字,题目关于它的位数操作,可以用while循环配上%(取模),/(除法)来逐步减位数,进行操作
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;cin>> n;int sum=0;for(int i=1;i<n+1;i++){int x=i;while(x>0){int ge = x%10;x/=10;if((ge==2)||(ge==0)||(ge==1)||(ge==9)){sum+=i; break;}}}cout<< sum;return 0;
}
4.对于某组数字判断其是否包含某些数字,可以将该组数字排序,然后寻找
#include<bits/stdc++.h>
using namespace std;
//某人年龄立方是4位数,四次方是6位数,并且这10个数字包含了0-9,求这个年龄
bool panduan(long long cube,long long forth)
{string s = to_string(cube)+to_string(forth);//满足10个数字if(s.size()==10){//对这个字符串排序sort(s.begin(),s.end());for(int j=0;j<10;j++){if(s[j] !='0'+j)return false;}}return true;
}
int main()
{//估算出年龄在10-30之间for(int i=10;i<30;i++){long long cube = (i*i*i);long long forth = (i*i*i*i);int flag = false;//满足位数条件if((cube)>1000&&(cube)<10000&& (forth)>100000 && forth<1000000){if(panduan(cube,forth)==true)cout<<"年龄是:"<< i;}}return 0;
}