블 루 브리지 컵 의 한 문제 dfs 가 요구 에 부 합 된 14 비트 정수 배열
요구 하 는 것 은 두 개의 1 칸 에 다른 숫자 가 하나 있 고, 두 개의 2 칸 에 다른 숫자 가 2 개 있 는데, 이런 식 으로 유추 하면 두 개의 7 칸 에 7 개의 다른 숫자 가 있다.다음 과 같은 것 은 요구 에 부합 되 는 배열 이다.
17126425374635
물론 거꾸로 하면 요구 에 부합 한다.
요구 에 부합 되 는 또 다른 배열 법 을 찾 아 보 세 요. 그리고 이 배열 법 은 74 로 시작 합 니 다.
주의: 이 14 자리 의 정수 만 작성 하고 불필요 한 내용, 예 를 들 어 설명 주석 등 을 작성 할 수 없습니다.
dfs, 남 은 1, 2, 3, 5, 6, 5 개의 깊이 가 5 인 dfs 로 쓴 코드 가 틀 렸 는 지 모 르 겠 습 니 다. 어쨌든 마지막 에 하나 밖 에 출력 되 지 않 았 습 니 다. 모두 몇 개 있 는 지 모 르 겠 습 니 다. 어쨌든 하 나 를 찾 았 습 니 다.
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[5] = {1, 2, 3, 5, 6};
int tem[14];
bool vis[10];
void dfs(int dep) {
if (dep == 5) {
for (int i = 0; i < 14; i++) {
printf("%d", tem[i]);
}
puts("");
return ;
}
for (int i = dep; i < 5; i++) {
if (!vis[a[i]]) {
for (int j = 0; j < 14; j++) {
// ,&&
if (tem[j] == 0 && j + a[i] + 1 < 14 && tem[j + a[i] + 1] == 0) {
tem[j] = tem[j + a[i] + 1] = a[i];
vis[a[i]] = true;
dfs(dep + 1);
vis[a[i]] = false;
tem[j] = tem[j + a[i] + 1] = 0;
}
}
}
}
}
int main()
{
memset(tem, 0, sizeof(tem));
memset(vis, false, sizeof(vis));
vis[4] = vis[7] = true;
tem[8] = tem[0] = 7;
tem[6] = tem[1] = 4;
dfs(0);
return 0;
}
결 과 는:
74151643752362
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.