C++最后两个用例超时了请问怎么优化呢
查看原帖
C++最后两个用例超时了请问怎么优化呢
459428
85LP楼主2022/4/8 14:36
#include<bits/stdc++.h>
using namespace std; 
int c[14][14],n,target; 
void dfs(int c[][14],int a,int b){
	c[a][b]=1;
	if(a==n) {//到了最后一行 
		target++;
		if(target<4){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(c[i][j]==1) 
						cout<<j<<" ";
				}
			}
			cout<<endl;
		} 
		return;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==a&&j==b) 
				continue;
			if(i==a&&c[i][j]==0) //纵轴 
				c[i][j]=a+1;
			if(j==b&&c[i][j]==0)//横轴 
				c[i][j]=a+1;
			if(abs(double(i-a)/(j-b))==1&&c[i][j]==0)//对角线 
				c[i][j]=a+1;
		}
	}
	
	for(int i=1;i<=n;i++){
		if(c[a+1][i]==0){
			int k=i;
			dfs(c,a+1,i);
			//此处需要还原矩阵 
			c[a+1][k]=0;
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(c[i][j]==a+1+1) 
						c[i][j]=0;
				}
			}
		}
	}
	return;
	
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int s=0;s<=n;s++){
			for(int t=0;t<=n;t++){
				c[s][t]=0;
			}
		}
		dfs(c,1,i);
	}
	cout<<target;
	return 0;
}
2022/4/8 14:36
加载中...