1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; char mp[10][10]; int r[100][3]; // 存放*的坐标 int n,cnt,num; // 判断在x,y位置放置字符k 是否OK bool is_ok(int x,int y,char k){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==x&&mp[i][j]==k)return false; if(j==y&&mp[i][j]==k)return false; if(i-j==x-y&&mp[i][j]==k)return false; if(i+j==x+y&&mp[i][j]==k)return false; } } return true; } void prt(){ cout<<"---------------"<<endl; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<mp[i][j]; } cout<<endl; } } // 向以 下标为 k 的 r数组的坐标 的方格 填数 void dfs(int k){ for(int i=1;i<=n;i++){ if(is_ok(r[k][1],r[k][2],i+'0')){ mp[r[k][1]][r[k][2]]=i+'0'; if(k==num){ cnt++; //prt(); //return; } else dfs(k+1); mp[r[k][1]][r[k][2]]=0; } } } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>mp[i][j]; if(mp[i][j]=='*'){ r[++num][1]=i; r[num][2]=j; } } } dfs(1); cout<<cnt; return 0; }
- 1
信息
- ID
- 2562
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者