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 ninesun127 at 2016-10-20 13:35:59 on Problem 2676
#include<iostream>  
#include<cstring>  
#define N (((x-1)/3)*3+ (y-1)/3+1)  
//#define (!book_row[i][j]&&!book_col[i][j]&&!book[N][j])   
using namespace std;  
  
int map[10][10];  
char _map[10][10];  

int bookr[10][10];//进行行的标记  
int bookc[10][10];//进行列的标记   
int booka[10][10];//进行小块的标记   
int flag;  
  
/*怎么判断第i行第j列位于第几块(行主序)是重点; 
area=((i-1)/3)*3+ j/3+1; 
跑一个:   
1 1 1 2 2 2 3 3 3 
1 1 1 2 2 2 3 3 3 
1 1 1 2 2 2 3 3 3 
4 4 4 5 5 5 6 6 6 
4 4 4 5 5 5 6 6 6 
4 4 4 5 5 5 6 6 6 
7 7 7 8 8 8 9 9 9 
7 7 7 8 8 8 9 9 9 
7 7 7 8 8 8 9 9 9 
 
-------------------------------- 
Process exited after 0.04042 seconds with return value 0 
请按任意键继续. . . 
*/   
   
   void dfs(int x,int y)
   {
  	 	if(flag)return;
   	
   		if(x==9&&y==10)
   		{
   			flag=1;
			for(int i=1;i<=9;i++)
			{
				for(int j=1;j<=9;j++)
					cout<<map[i][j];
								  
				cout<<endl;	
			}
	   	return;
			 
		
	}	
	
	
	
	if(x<1||x>9||y<1||y>9)return;
	
	
	if(map[x][y])
	{
		//cout<<"x: "<<x<<" y: "<<y<<" map[x][y] "<<map[x][y]<<endl; 
		dfs(x,y+1);
		dfs(x+1,1);
	} 
	
	int k;
	for( k=1;k<=9;k++)
	{
		if(!bookr[x][k]&&!bookc[y][k]&&!booka[N][k])
		{
			bookr[x][k]=1;
			bookc[y][k]=1;
			booka[N][k]=1;
			map[x][y]=k;
			//cout<<"x: "<<x<<" y: "<<y<<" map[x][y] "<<map[x][y]<<" N: "<<N<<endl;
			
			dfs(x,y+1);
			dfs(x+1,1);
		
			bookr[x][k]=0;
			bookc[y][k]=0;
			booka[N][k]=0;	
		}
	}
	
   }
   int main()  
{  
    int t;  
    cin>>t;  
      
    while(t--)  
    {  
        flag=0;  
        memset(bookr,0,sizeof(bookr));  
        memset(bookc,0,sizeof(bookc));  
        memset(booka,0,sizeof(booka));  
          
        for(int i=1;i<=9;i++)  
        for(int j=1;j<=9;j++)  
        {  
            cin>>_map[i][j];  
            map[i][j]=_map[i][j]-'0';  
              
            if(map[i][j])  
            {  	int x=i;int y=j; 
                bookr[i][map[i][j]]=1;  
                bookc[j][map[i][j]]=1;  
                booka[N][map[i][j]]=1;  
               // cout<<i<<' '<<j<<" "<<N<<endl;
            }  
        
         }   
        
		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