1 solutions

  • 0
    @ 2025-11-5 19:34:19

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <queue>
    using namespace std;
    struct st{
    	st(){}
    	st(int x1,int x2,int x3,int x4,int x5,int x6,int x7,int x8,int x9,int a,int *x,int cc){
    		int i;
    		arr[0][0]=x1;arr[0][1]=x2;arr[0][2]=x3;
    		arr[1][0]=x4;arr[1][1]=x5;arr[1][2]=x6;
    		arr[2][0]=x7;arr[2][1]=x8;arr[2][2]=x9;
    		
    		for(i=0;i<cc;i++){
    			list[i]=x[i];
    		}
    		list[cc]=a;
    		c=cc+1;
    	}
    	int arr[3][3];
    	int list[100];
    	int c;
    };
    queue<st> que;
    int pd(st &x){
    	int i,j;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			if(x.arr[i][j]==15)
    				x.arr[i][j]=3;
    		}
    	}
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			if(x.arr[i][j]!=12)
    				return 0;
    		}
    	}
    	return 1;
    }
    int main(){
    	int i,j;
    	st goal;
    	for(i=0;i<3;i++){
    		for(j=0;j<3;j++){
    			cin>>goal.arr[i][j];
    		}
    	}
    	goal.c=0;
    	que.push(goal);
    	while(que.size()){
    		st p=que.front();
    	//	getchar();
    		que.pop();
    		if(pd(p)){
    			for(i=0;i<p.c;i++){
    				if(i==0)
    					cout<<p.list[i];
    				else
    					cout<<" "<<p.list[i];
    			}
    			break;
    		}else{
    			int x1=p.arr[0][0],x2=p.arr[0][1],x3=p.arr[0][2],x4=p.arr[1][0],x5=p.arr[1][1],x6=p.arr[1][2],x7=p.arr[2][0],x8=p.arr[2][1],x9=p.arr[2][2];
    			que.push(st(x1+3,x2+3,x3,x4+3,x5+3,x6,x7,x8,x9,1,p.list,p.c));
    			que.push(st(x1+3,x2+3,x3+3,x4,x5,x6,x7,x8,x9,2,p.list,p.c));
    			que.push(st(x1,x2+3,x3+3,x4+3,x5+3,x6,x7,x8,x9,3,p.list,p.c));
    			que.push(st(x1+3,x2,x3,x4+3,x5,x6,x7+3,x8,x9,4,p.list,p.c));
    			que.push(st(x1,x2+3,x3,x4+3,x5+3,x6+3,x7,x8+3,x9,5,p.list,p.c));
    			que.push(st(x1,x2,x3+3,x4,x5,x6+3,x7,x8,x9+3,6,p.list,p.c));
    			que.push(st(x1,x2,x3,x4+3,x5+3,x6,x7+3,x8+3,x9,7,p.list,p.c));
    			que.push(st(x1,x2,x3,x4,x5,x6,x7+3,x8+3,x9+3,8,p.list,p.c));
    			que.push(st(x1,x2,x3,x4,x5+3,x6+3,x7,x8+3,x9+3,9,p.list,p.c));
    		}
    	}
    	
        return 0;
    }
    

    Pascal :

    const
      data:array[1..9,0..5] of longint=
                                 ((4,1,2,4,5,0),
                                  (3,1,2,3,0,0),
                                  (4,2,3,5,6,0),
                                  (3,1,4,7,0,0),
                                  (5,2,4,5,6,8),
                                  (3,3,6,9,0,0),
                                  (4,4,5,7,8,0),
                                  (3,7,8,9,0,0),
                                  (4,5,6,8,9,0));
    var
      a,b:array[1..9] of longint;
      x,i:longint;
      ans:string;
    procedure outit;
    var
      i,j:longint;
    begin
      for i:=1 to 9 do
        if a[i] mod 4<>0 then exit;
      ans:='';
      for i:=1 to 9 do
        for j:=1 to b[i] do
          ans:=ans+chr(i+48)+' ';
      delete(ans,length(ans),1);
      writeln(ans);halt;
    end;
    procedure dfs(depth:longint);
    var
      i,j:longint;
    begin
      if depth=10 then outit
      else
        begin
          for i:=0 to 3 do
            begin
              b[depth]:=i;
              for j:=1 to data[depth,0] do
                inc(a[data[depth,j]],i);
              dfs(depth+1);
              for j:=1 to data[depth,0] do
                dec(a[data[depth,j]],i);
            end;
        end;
    end;
    begin
      for i:=1 to 9 do
        begin
          read(x);a[i]:=x div 3;
        end;
      dfs(1);
    end.
    
    • 1

    Information

    ID
    19403
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By