2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int a[15][15],b[15][15],ans,n,m,R[15],C[15]; bool Rmk[15][10],Cmk[15][10]; bool ok() { for(int i=1;i<=n;i++)if(R[i]!=0)return 0; for(int j=1;j<=m;j++)if(C[j]!=0)return 0; return 1; } void dfs(int x,int y) { if(ans>1)return; if(x==n+1) { if(ok()==1){ans++;memcpy(b,a,sizeof(b));} return; } if(y==m+1) { if(R[x]==0)dfs(x+1,1); return; } if(a[x][y]!=0){dfs(x,y+1);return;} for(int k=1;k<=9;k++) { if(Rmk[x][k]==0&&Cmk[y][k]==0&&R[x]>=k&&C[y]>=k) { a[x][y]=k; Rmk[x][k]=Cmk[y][k]=1; R[x]-=k; C[y]-=k; dfs(x,y+1); a[x][y]=0; Rmk[x][k]=Cmk[y][k]=0; R[x]+=k; C[y]+=k; } } } int main() { int t;scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&R[i]); for(int j=1;j<=m;j++)scanf("%d",&C[j]); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]); memset(Rmk,0,sizeof(Rmk)); memset(Cmk,0,sizeof(Cmk)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]!=0) { R[i]-=a[i][j]; C[j]-=a[i][j]; Rmk[i][a[i][j]]=1; Cmk[j][a[i][j]]=1; } } } ans=0; dfs(1,1); if(ans>1)printf("Not unique.\n"); else if(ans==0)printf("No answer.\n"); else { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%d ",b[i][j]); } printf("\n"); } } } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int a[15][15],b[15][15],ans,n,m,R[15],C[15]; bool Rmk[15][10],Cmk[15][10]; bool ok() { for(int i=1;i<=n;i++)if(R[i]!=0)return 0; for(int j=1;j<=m;j++)if(C[j]!=0)return 0; return 1; } void dfs(int x,int y) { if(ans>1)return; if(x==n+1) { if(ok()==1){ans++;memcpy(b,a,sizeof(b));} return; } if(y==m+1) { if(R[x]==0)dfs(x+1,1); return; } if(a[x][y]!=0){dfs(x,y+1);return;} for(int k=1;k<=9;k++) { if(Rmk[x][k]==0&&Cmk[y][k]==0&&R[x]>=k&&C[y]>=k) { a[x][y]=k; Rmk[x][k]=Cmk[y][k]=1; R[x]-=k; C[y]-=k; dfs(x,y+1); a[x][y]=0; Rmk[x][k]=Cmk[y][k]=0; R[x]+=k; C[y]+=k; } } } int main() { int t;scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&R[i]); for(int j=1;j<=m;j++)scanf("%d",&C[j]); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]); memset(Rmk,0,sizeof(Rmk)); memset(Cmk,0,sizeof(Cmk)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]!=0) { R[i]-=a[i][j]; C[j]-=a[i][j]; Rmk[i][a[i][j]]=1; Cmk[j][a[i][j]]=1; } } } ans=0; dfs(1,1); if(ans>1)printf("Not unique.\n"); else if(ans==0)printf("No answer.\n"); else { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%d ",b[i][j]); } printf("\n"); } } } return 0; }
- 1
信息
- ID
- 85
- 时间
- 5000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 198
- 已通过
- 59
- 上传者