求助n=12,13回溯优化
查看原帖
求助n=12,13回溯优化
920936
secuy楼主2023/2/27 10:33

该怎么优化呢

#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;

vector<int> trackPath;
int sum=0;

int checkPush(vector<int> arr,int row,int col) {
	for(int i=1;i<row;i++) {
		if(abs(col-arr[i])==abs(row-i) || col==arr[i]) {
			return 0;
		}
	}
	return 1;
}

void track(vector<int> &arr,int row,int n) {
	if(row==n+1) {
		sum++;
		if(sum<=3) {
			for(int i=0;i<trackPath.size();i++) {
				cout<<trackPath[i]<<" ";
			}
			cout<<"\n";
		}
		return;
	}	
	for(int i=1;i<n+1;i++) {
		if(checkPush(arr,row,i)) {
			trackPath.push_back(i);
			arr[row] = i;
			track(arr,row+1,n);
			trackPath.pop_back();
			arr[row] = 0;
		}
	}	
}

int main(int argc, char** argv) {
	int n;
	cin>>n;
	vector<int> arr(n+1, 0);
	track(arr,1,n);
	cout<<sum;
	return 0;
}
2023/2/27 10:33
加载中...