题外话,第一次知道运行错误可能是由于数组开小导致的。。
A - 棋盘问题
#include <bits/stdc++.h>
using namespace std;
char a[15][15];
int you,n,ans,k,book[15];
void dfs(int h){
if(you==k){
ans++;
return;
}
if(h>=n)
return;
for(int i=0;i<n;i++){
if(book[i]!=0)
continue;
if(a[h][i]=='#'&&book[i]==0){
book[i]=1;
you++;
dfs(h+1);
book[i]=0;
you--;
}
}
dfs(h+1);
}
int main(){
while(scanf("%d%d",&n,&k)!=EOF){
if(n==-1&&k==-1)
break;
ans=0;
you=0;
memset(book,0,sizeof(book));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
dfs(0);
cout<<ans<<"\n";
}
return 0;
}
B - Perket
#include <bits/stdc++.h>
using namespace std;
int s[15],b[15],book[15];
int n,mi=999999,sums=1,sumb=0,ans;
void dfs(int group){
if(group<=n){
for(int i=1;i<=n;i++){
if(book[i]==0){
sums*=s[i];
sumb+=b[i];
if(abs(sums-sumb)<mi)
mi=abs(sums-sumb);
book[i]=1;
dfs(group+1);
book[i]=0;
sums/=s[i];
sumb-=b[i];
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i]>>b[i];
dfs(1);
cout<<mi;
return 0;
}
C - 全排列
#include <bits/stdc++.h>
using namespace std;
char a[10];
int main()
{
gets(a);
int len=strlen(a);
do{
puts(a);
}while(next_permutation(a,a+len));
return 0;
}
G - Knight Moves
#include <bits/stdc++.h>
using namespace std;
int head,tail;
int book[310][310];
int ne[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};
struct note{
int x;
int y;
int step;
}que[90010];
int main(){
int L,startx,starty,p,q,tx,ty,flag;
int n;
cin>>n;
while(n--){
memset(book,0,sizeof(book));
cin>>L;
cin>>startx>>starty>>p>>q;
head=1;
tail=1;
que[tail].x=startx;
que[tail].y=starty;
que[tail].step=0;
tail++;
book[startx][starty]=1;
flag=0;
while(head<tail){
for(int k=0;k<8;k++){
tx=que[head].x+ne[k][0];
ty=que[head].y+ne[k][1];
if(tx<0 || ty<0 || tx>L || ty>L)
continue;
if(book[tx][ty]==0){
book[tx][ty]=1;
que[tail].x=tx;
que[tail].y=ty;
que[tail].step=que[head].step+1;
tail++;
}
if(tx==p && ty==q){
flag=1;
break;
}
}
if(flag)
break;
head++;
}
if(startx==p && starty==q)
cout<<"0\n";
else
cout<<que[tail-1].step<<"\n";
}
return 0;
}
K - 迷宫(一)
#include <bits/stdc++.h>
using namespace std;
char a[10][10];
int book[15][15],n,m,flag,p,q;
void dfs(int x,int y){
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int tx,ty;
if(x==p&&y==q){
flag=1;
return;
}
for(int k=0;k<=3;k++){
tx=x+next[k][0];
ty=y+next[k][1];
if(tx<1 || tx>n || ty<1 ||ty>m)
continue;
if( (a[tx][ty]=='.'|| a[tx][ty]=='T') && book[tx][ty]==0){
book[tx][ty]=1;
dfs(tx,ty);
book[tx][ty]=0;
}
}
return;
}
int main(){
int sx,sy;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='T'){
p=i;
q=j;
}
if(a[i][j]=='S'){
sx=i;
sy=j;
}
}
book[sx][sy]=1;
dfs(sx,sy);
if(flag)
cout<<"yes\n";
else
cout<<"no\n";
return 0;
}
M - 八皇后问题
#include<iostream>
using namespace std;
const int N=18;
int a[N][N];
bool col[N];
bool g[N],ug[N];
int ans;
int m=0;
void dfs(int t)
{
if(t==8)
{
m=max(m,ans);
return ;
}
for(int i=0;i<8;i++)
{
if(!col[i]&&!g[t-i+8]&&!ug[t+i])
{
ans+=a[t][i];
col[i]=g[t-i+8]=ug[t+i]=1;
dfs(t+1);
col[i]=g[t-i+8]=ug[t+i]=0;
ans-=a[t][i];
}
}
}
int main()
{
int k;
cin>>k;
while(k--)
{
m=0;
ans=0;
g[N]=0;
ug[N]=0;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cin>>a[i][j];
}
dfs(0);
cout<<m<<endl;
}
return 0;
}