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

请路过的大虾帮忙看看为什么输入4*3的正确,输入6*6的就死循环了呢?

Posted by TangMing at 2009-02-20 23:14:40 on Problem 2488
#include<iostream>
using namespace std;
int flag[27][27];
int vr[900],vc[900];
int count=0;
bool ac=0;
int p,q;
int ii;
int add[8][2]={{-1,-2},{-1,2},{1,-2},{1,2},{2,1},{2,-1},{-2,1},{2,-1}};//访问规则
void dfs(int r,int c)
{
    if(ac==0&&count==p*q)
    {  ac=1;//问题已解决
       printf("Scenario #%d:\n",ii);
       for(int i=0;i<count;i++)
       {
         printf("%c%d",vr[i]+'A',vc[i]+1); 	
       }
       printf("\n\n");return;
    }	
    else if(ac==0)
    {
      for(int j=0;j<8;j++)
      {
        int tr=r+add[j][0];
        int tc=c+add[j][1];
        if(tr<p&&tr>=0&&tc<q&&tc>=0&&flag[tr][tc]==0)
        {  
           vr[count]=tr;vc[count]=tc;
           count++;
           flag[tr][tc]=1;
           dfs(tr,tc);
           flag[tr][tc]=0;
           count--;	
        }	
      }
    }
    
}
int main()
{
    int n;
    cin>>n;
    for(ii=1;ii<=n;ii++)
    {  
       ac=0;
       scanf("%d%d",&q,&p);
       memset(flag,0,sizeof(flag));
       for(int j=0;j<p;j++)
       {
       	for(int k=0;k<q;k++)
        { count=1;
          vr[0]=j;vc[0]=k;//设置起点
          flag[j][k]=1;
          dfs(j,k);	
          if(ac==1)
          break;
        }
        if(ac==1)break;
       }
       if(ac==0)
       printf("Scenario #%d:\nimpossible\n\n",ii);
    }
    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