捞,玄关
  • 板块灌水区
  • 楼主LGCat_ERR
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/9 16:49
  • 上次更新2024/8/9 17:47:49
查看原帖
捞,玄关
747305
LGCat_ERR楼主2024/8/9 16:49

是一个递归算法,现在是要解决没输出的问题 p1784

#include<bits/stdc++.h>
using namespace std;

int m[100][100];
bool n=0;

void put(int x,int y){
//	cout<<'('<<x<<','<<y<<") ";
	int flag=0;//判定数字是否可行 
	for(int i=1;i<=9&&n==0;i++){//put number
		for(int j=1;j<=9&&m[x][y]==0;j++){//check x	
			if(m[y][j]==i){
	//			cout<<m[y][j]<<' '<<j<<' '<<i<<endl;
				flag=1;
				break;
			}
		}
		for(int j=1;j<=9&&flag==0&&m[x][y]==0;j++){//check y
	//		cout<<2;
			if(m[j][x]==i){
				flag=1;
				break;
			}
		}
		if(flag){
			
			continue;
		}
		if(m[x][y]==0){		
			m[x][y]=i;
		}	
		if(x==9&&y==9){
			for(int a=1;a<=9;a++){
				for(int j=1;j<9;j++){
					cout<<m[i][j]<<' ';
				}
				cout<<endl;
			}
			n=1;
			return;
		}
			
		if(x==9)put(1,y+1);
		else put(x+1,y);
		m[x][y]=0;
	}	
	return;
}

int main(){
	for(int i=1;i<=9;i++){
		for(int j=1;j<9;j++){
			cin>>m[i][j];
		}
	}
	put(1,1);
}
2024/8/9 16:49
加载中...