- ์ด ๋ฌธ์ ๋ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
int arr[20][20];
int result=987987987;
// dfs๋ก ํ์ํ์ฌ cnt๊ฐ n/2๊ฐ ๋๋ฉด ๊ฐ๊ฐ์ ๋ฅ๋ ฅ์น ๊ณ์ฐ
void dfs(int s,int cnt,bool check[]){
if(cnt==n/2){
int sum1=0;
int sum2=0;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(check[i] && check[j]){
sum1+=arr[i][j];
sum1+=arr[j][i];
}
if(!check[i] && !check[j]){
sum2+=arr[i][j];
sum2+=arr[j][i];
}
}
}
result=min(abs(sum1-sum2),result);
}
else{
for(int i=s;i<n;i++){
if(!check[i]){
check[i]=1;
dfs(i,cnt+1,check);
check[i]=0;
}
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>arr[i][j];
}
}
bool check[20]={0};
dfs(0,0,check);
cout<<result;
}
- Next_permuation ์ด์ฉํ ํ์ด
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
int arr[20][20];
int result=987987987;
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>arr[i][j];
}
}
vector<int> temp;
for(int i=0;i<n/2;i++){
temp.push_back(0);
temp.push_back(1);
}
sort(temp.begin(),temp.end());
do{
int sum1=0;
int sum2=0;
for(int i=0;i<n-1;i++){
for(int j=i;j<n;j++){
if(temp[i] && temp[j]){
sum1+=arr[i][j];
sum1+=arr[j][i];
}
if(!temp[i] && !temp[j]){
sum2+=arr[i][j];
sum2+=arr[j][i];
}
}
}
result=min(abs(sum1-sum2),result);
}while(next_permutation(temp.begin(),temp.end()));
cout<<result;
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.