Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我是用递归函数做的,哪位前辈能否指教错在哪?

Posted by Rieman at 2009-08-10 20:28:56 on Problem 2965
#include <iostream>
using namespace std;
bool a[12][12];int k,b[100][3];
bool inlaw()  //判断合法;
{ int i,j;
  for(i=1;i<=4;i++)
   for(j=1;j<=4;j++)
    if(a[i][j])
     return 0;
  return 1;
}
void swit(int c,int d)  //(c,d)处行列取反;
{ int j;
 for(j=1;j<=4;j++)
 { a[c][j]=!a[c][j];
   a[j][d]=!a[j][d];
 }
  a[c][d]=!a[c][d];
}
void output()
{ int i;
  cout<<k-1<<endl;
  for(i=1;i<k;i++)
  cout<<b[i][1]<<' '<<b[i][2]<<endl;
}
void DFS(int row,int col)
{ int i,j;
 if(inlaw()) 
 output();
 else
   for(i=row;i<=4;i++)
    for(j=col;j<=4;j++)
    { swit(i,j);b[k][1]=i;b[k++][2]=j;
      if(i==4&&j==4)
   {   if(inlaw()) 
               output();
   }
   else if(j==4)
    DFS(i+1,1);
   else
    DFS(i,j+1);
   swit(i,j);k--;
    }
}
int main()
{   char c[12][12];int i,j;
 for(i=1;i<=4;i++)
   for(j=1;j<=4;j++)
   { cin>>c[i][j];
     if(c[i][j]=='+')
   a[i][j]=1;
  else
   a[i][j]=0;
   }
 k=1;
    DFS(1,1);
 return 0;
} 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator