C언어/문제풀다 하나씩

주변도 같이 사라지는 배열에서 재귀구현 노가다

mcdn 2020. 5. 29. 21:51
반응형
#include <iostream>
#include <string>
using namespace std;

int arr[5];
//int cnt;
int used[5];
int direct[3] = { -1,0,1 };
int path[5];
int maxd[5];
int maxx = 0;

void dfs(int lev, int sum) {
	
	if (lev == 5) {
		if (sum > maxx) {
			//cout << "==" << sum << endl;
			maxx = sum;
			for (int i = 0; i < 5;i++) {
				maxd[i] = path[i];
			}//cout << endl;
		}
		return;
	}
	for (int i = 0; i < 5;i++) {
		int cnt = 0;
		if (used[i] == 0) {
			used[i] = 1;
			path[i] = 1;
			cnt++;
			int t1 = 0, t2 = 0;
			if (i - 1 >= 0 && used[i-1] ==0) {
				used[i - 1] = 1;
				cnt++;
				t1 = 1;
			}
			if (i + 1 < 5 && used[i + 1] == 0) {
				used[i + 1] = 1;
				cnt++;
				t2 = 1;
			}
			dfs(lev + cnt, sum + arr[i]);
			used[i] = 0;
			path[i] = 0;
			if (t1 == 1) used[i - 1] = 0;
			if (t2 == 1) used[i + 1] = 0;
		}
	}
}
int main() {
	for (int i = 0; i < 5;i++) {
		cin >> arr[i];
	}
	dfs(0, 0);
	int prinnt[5] = { 0 };
	int head = 0;
	for (int i = 0; i < 5;i++) {
		if (maxd[i] == 1) {
			prinnt[head++] = arr[i];
		}
	}
	for (int i = 0; i < head - 1;i++) {
		cout << prinnt[i]<<"+";
	}cout << prinnt[head - 1];
	cout << "=" << maxx;
}


 쉬운 방법 없나...

특히 저 used배열 하기가 가장 어렵

반응형