알고리즘 노트 연습
20168 단어 알고리즘 노트
알고리즘 노트 연습 문제 모음집
링크
제목
제목 묘사 배열과 조합은 자주 사용하는 수학 방법이다.먼저 정수(1<=n<==10), 예를 들어 n=3, 모든 조합을 주고 사전순으로 출력합니다.1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
정수 n 입력 (1<=n<=10)
출력 출력 모든 정렬
모든 줄을 한 줄로 배열하고, 인접한 두 수는 공백으로 구분한다. (마지막 수 뒤에는 공백이 없다)
샘플 입력3
샘플 출력1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
생각
제목 묘사 배열과 조합은 자주 사용하는 수학 방법이다.먼저 정수(1<=n<==10), 예를 들어 n=3, 모든 조합을 주고 사전순으로 출력합니다.
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
정수 n 입력 (1<=n<=10)
출력 출력 모든 정렬
모든 줄을 한 줄로 배열하고, 인접한 두 수는 공백으로 구분한다. (마지막 수 뒤에는 공백이 없다)
샘플 입력
3
샘플 출력
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
생각
next_permutation
버전: std::next_permutation 코드
반복 버전
#include
#include
using namespace std;
int n;
vector<int> ans(11);
vector<bool> hashTable(11, false);
void DFS(int index) {
if (index > n) {
for (int i = 1; i <= n; ++i) {
if (i != 1)
putchar(' ');
printf("%d", ans[i]);
}
putchar('
');
return;
}
for (int i = 1; i <= n; ++i) {
if (hashTable[i] == false) {
ans[index] = i;
hashTable[i] = true;
DFS(index + 1);
hashTable[i] = false;
}
}
}
int main() {
while(scanf("%d", &n) != EOF)
DFS(1);
return 0;
}
교체 버전
#include
#include
#include
using namespace std;
bool myNextPermutation(vector<int>& nums) {
int pivot, pos;
for (pivot = nums.size() - 1; pivot > 0 && nums[pivot - 1] >= nums[pivot]; --pivot)
continue;
if (pivot == 0)
return false;
--pivot;
for (pos = pivot; pos < nums.size() - 1 && nums[pos + 1] >= nums[pivot]; ++pos)
continue;
swap(nums[pivot], nums[pos]);
reverse(nums.begin() + pivot + 1, nums.end());
return true;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
vector<int> nums(n);
for (int i = 1; i <= n; ++i)
nums[i - 1] = i;
do {
for (int i = 0; i < n; ++i) {
if (i > 0)
putchar(' ');
printf("%d", nums[i]);
}
putchar('
');
} while (myNextPermutation(nums));
}
return 0;
}
라이브러리 함수next_permutation 버전
#include
#include
#include
using namespace std;
int main() {
int n;
while (scanf("%d", &n) != EOF) {
vector<int> nums(n);
for (int i = 1; i <= n; ++i)
nums[i - 1] = i;
do {
for (int i = 0; i < n; ++i) {
if (i > 0)
putchar(' ');
printf("%d", nums[i]);
}
putchar('
');
} while (next_permutation(nums.begin(), nums.end()));
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 스크립트 일기의 검증 두 갈래 검색 트리
두 갈래 나무를 정해 효과적인 두 갈래 검색 나무인지 아닌지를 판단한다.
두 갈래 검색 트리에는 다음과 같은 정의가 있습니다.
예 1:
두 갈래 나무[2,1,3],true로 돌아갑니다.
예 2:
두 갈래 나무[1,2...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#include
using namespace std;
int n;
vector<int> ans(11);
vector<bool> hashTable(11, false);
void DFS(int index) {
if (index > n) {
for (int i = 1; i <= n; ++i) {
if (i != 1)
putchar(' ');
printf("%d", ans[i]);
}
putchar('
');
return;
}
for (int i = 1; i <= n; ++i) {
if (hashTable[i] == false) {
ans[index] = i;
hashTable[i] = true;
DFS(index + 1);
hashTable[i] = false;
}
}
}
int main() {
while(scanf("%d", &n) != EOF)
DFS(1);
return 0;
}
#include
#include
#include
using namespace std;
bool myNextPermutation(vector<int>& nums) {
int pivot, pos;
for (pivot = nums.size() - 1; pivot > 0 && nums[pivot - 1] >= nums[pivot]; --pivot)
continue;
if (pivot == 0)
return false;
--pivot;
for (pos = pivot; pos < nums.size() - 1 && nums[pos + 1] >= nums[pivot]; ++pos)
continue;
swap(nums[pivot], nums[pos]);
reverse(nums.begin() + pivot + 1, nums.end());
return true;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
vector<int> nums(n);
for (int i = 1; i <= n; ++i)
nums[i - 1] = i;
do {
for (int i = 0; i < n; ++i) {
if (i > 0)
putchar(' ');
printf("%d", nums[i]);
}
putchar('
');
} while (myNextPermutation(nums));
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
int n;
while (scanf("%d", &n) != EOF) {
vector<int> nums(n);
for (int i = 1; i <= n; ++i)
nums[i - 1] = i;
do {
for (int i = 0; i < n; ++i) {
if (i > 0)
putchar(' ');
printf("%d", nums[i]);
}
putchar('
');
} while (next_permutation(nums.begin(), nums.end()));
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 스크립트 일기의 검증 두 갈래 검색 트리두 갈래 나무를 정해 효과적인 두 갈래 검색 나무인지 아닌지를 판단한다. 두 갈래 검색 트리에는 다음과 같은 정의가 있습니다. 예 1: 두 갈래 나무[2,1,3],true로 돌아갑니다. 예 2: 두 갈래 나무[1,2...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.