1 solutions
-
0
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