一.概念部分
1.相关概念
对问题的所有可能情况进行逐一尝试,并从中找到所有符合条件的解决方案。
暴力枚举算法通常采用循环或递归的方式来实现。循环实现通常是嵌套多层循环,逐个枚举每个可能的情况,并在内层循环中对每种情况进行检查;递归实现则是将问题分解为更小的子问题,逐层递归求解,直到找到符合条件的解。
2.条件
1.枚举的范围一般需要连续
2.枚举内容需要已知
3.局限性
简单的枚举一般只适用于解决简单的问题,难以求出或范围特别大,明显超时。
下面是举例
二.实例
题解:三重循环暴力枚举
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dx[9]={0,0,0,1,1,1,-1,-1,-1};
ll dy[9]={0,1,-1,0,1,-1,0,1,-1};
ll n, ma;
ll a[20][20];
ll calc(ll x, ll y, ll t)
{
ll res = a[x][y];
for(int i=1;i<n;i++)
{
x = (x+dx[t]+n)%n;
y = (y+dy[t]+n)%n;
res = res*10+a[x][y];
}
return res;
}
int main()
{
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%1lld", &a[i][j]);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=1;k<=8;k++)
{
ma = max(ma, calc(i,j,k));
}
}
}
cout << ma;
return 0;
}