Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.58 KB | None | 0 0
  1.  
  2. /******************************************************************
  3. * BISMILLAHIR RAHMANIR RAHIM *
  4. * Saddam Hossain shishir *
  5. * Hajee Mohammad Danesh Science & Technology University *
  6. * *
  7. ***************************************************************** */
  8. #include<iostream>
  9. #include<cstdio>
  10. #include<cstring>
  11. #include<map>
  12. #include<string>
  13. #include<set>
  14. #include<cmath>
  15. #include<cctype>
  16. #include<stack>
  17. #include<cstdlib>
  18. #include<utility>
  19. #include<vector>
  20. #include<deque>
  21. #include<queue>
  22. #include<algorithm>
  23.  
  24. #define sc scanf
  25. #define si(t) scanf("%d",&t)
  26. #define sl(t) scanf("%I64d",&t)
  27. #define sii(a,b) scanf("%d%d",&a,&b)
  28.  
  29. #define P(a) printf("%d\n",a)
  30. #define PLN(a) printf("%I64d ",a)
  31. #define pf printf
  32.  
  33. #define gcd(a,b) __gcd(a,b)
  34. #define ff first
  35. #define ss second
  36. #define pr1(a) cout<<a<<endl
  37. #define pr2(a,b) cout<<a<<" "<<b<<endl
  38. #define pb push_back
  39. #define pii pair<int,int>
  40. #define mk make_pair
  41. #define pi acos(-1.0)
  42. #define PI 3.1415926535897932385
  43. #define Sin(a) sin((pi*a)/180)
  44. #define siz 1000001
  45. #define mem(ar) memset(ar,0,sizeof ar)
  46. #define one(x) __builtin_popcount(x)
  47. typedef long long ll;
  48. using namespace std;
  49.  
  50. //int dx[]= {-1,-1,0,0,1,1};
  51. //int dy[]= {-1,0,-1,1,0,1};
  52. int dx[]= {0,0,1,-1};/*4 side move*/
  53. int dy[]= {-1,1,0,0};/*4 side move*/
  54. //int dx[]= {1,1,0,-1,-1,-1,0,1};/*8 side move*/
  55. //int dy[]= {0,1,1,1,0,-1,-1,-1};/*8 side move*/
  56. //int dx[]={1,1,2,2,-1,-1,-2,-2};/*knight move*/
  57. //int dy[]={2,-2,1,-1,2,-2,1,-1};/*knight move*/
  58.  
  59. //'A'=65, 'a'=97 '0'=48
  60.  
  61.  
  62. map<ll,bool>visi;
  63. int ar[siz];
  64. int Set(int N,int pos)
  65. {
  66. return N=N | (1<<pos);
  67. }
  68. int reset(int N,int pos)
  69. {
  70. return N= N & ~(1<<pos);
  71. }
  72. bool check(int N,int pos)
  73. {
  74. return (bool)(N & (1<<pos));
  75. }
  76. map<vector<int>,int>vis,dis;
  77.  
  78. vector<int>vec,vec2,vec3,vec4,vec5,vec6,indicate,indicate2,puzzle;
  79. int answer=0;
  80. struct node
  81. {
  82. vector<int>vec,vec2,vec3;
  83. } vect;
  84. int merge_(vector<int>vec,vector<int>vec2,vector<int>vec3)
  85. {
  86. indicate.clear();
  87. int i;
  88. for(i=0; i<3; i++)
  89. indicate.pb(vec[i]);
  90. for(i=0; i<3; i++)
  91. indicate.pb(vec2[i]);
  92. for(i=0; i<3; i++)
  93. indicate.pb(vec3[i]);
  94. }
  95. void prinn(vector<int>vec,vector<int>vec2,vector<int>vec3)
  96. {
  97. for(int i=0; i<3; i++)
  98. cout<<vec[i]<<" ";
  99. cout<<endl;
  100. for(int i=0; i<3; i++)
  101. cout<<vec2[i]<<" ";
  102. cout<<endl;
  103. for(int i=0; i<3; i++)
  104. cout<<vec3[i]<<" ";
  105. cout<<endl<<endl;
  106.  
  107. }
  108. int bfs()
  109. {
  110. queue<node>qe;
  111. vect.vec=vec,vect.vec2=vec2,vect.vec3=vec3;
  112. qe.push(vect);
  113. merge_(vec,vec2,vec3);
  114. vis[indicate]=1;
  115. dis[indicate]=0;
  116. int row,col,x,y,z,a,b,c;
  117. while(!qe.empty())
  118. {
  119. node vett=qe.front();
  120. qe.pop();
  121. vec=vett.vec;
  122. vec2=vett.vec2;
  123. vec3=vett.vec3;
  124. vec4=vec,vec5=vec2,vec6=vec3;
  125. merge_(vec4,vec5,vec6);
  126. indicate2=indicate;
  127. if(dis[puzzle]) return dis[puzzle];
  128. for(int i=0; i<3; i++)
  129. {
  130. if(vec[i]==0)
  131. {
  132. row=0;
  133. col=i;
  134. break;
  135. }
  136. }
  137. for(int i=0; i<3; i++)
  138. {
  139. if(vec2[i]==0)
  140. {
  141. row=1;
  142. col=i;
  143. break;
  144. }
  145. }
  146. for(int i=0; i<3; i++)
  147. {
  148. if(vec3[i]==0)
  149. {
  150. row=2;
  151. col=i;
  152. break;
  153. }
  154. }
  155. for(int i=0; i<4; i++)
  156. {
  157. int row1=row+dx[i];
  158. int col1=col+dy[i];
  159. if(row1>=0&&row1<=2&&col1>=0&&col1<=2)
  160. {
  161. if(row==0)
  162. {
  163. x=vec[0];
  164. y=vec[1];
  165. z=vec[2];
  166. if(i==0)
  167. {
  168. vec4.clear();
  169. vec5=vec2;
  170. vec6=vec3;
  171. if(col==2)
  172. {
  173. vec4.pb(x);
  174. vec4.pb(z);
  175. vec4.pb(y);
  176.  
  177. }
  178. else if(col==1)
  179. {
  180. vec4.pb(y);
  181. vec4.pb(x);
  182. vec4.pb(z);
  183. }
  184. }
  185. else if(i==1)
  186. {
  187. vec4.clear();
  188. vec5=vec2;
  189. vec6=vec3;
  190. if(col==0)
  191. {
  192. vec4.pb(y);
  193. vec4.pb(x);
  194. vec4.pb(z);
  195. }
  196. else if(col==1)
  197. {
  198. vec4.pb(x);
  199. vec4.pb(z);
  200. vec4.pb(y);
  201. }
  202. }
  203. else if(i==2)
  204. {
  205. vec5.clear();
  206. vec4.clear();
  207. vec6=vec3;
  208. a=vec2[0];
  209. b=vec2[1];
  210. c=vec2[2];
  211. if(col==0)
  212. {
  213. vec4.pb(a);
  214. vec4.pb(y);
  215. vec4.pb(z);
  216.  
  217. vec5.pb(x);
  218. vec5.pb(b);
  219. vec5.pb(c);
  220. }
  221. else if(col==1)
  222. {
  223. vec4.pb(x);
  224. vec4.pb(b);
  225. vec4.pb(z);
  226.  
  227. vec5.pb(a);
  228. vec5.pb(y);
  229. vec5.pb(c);
  230.  
  231. }
  232. else if(col==2)
  233. {
  234. vec4.pb(x);
  235. vec4.pb(y);
  236. vec4.pb(c);
  237.  
  238. vec5.pb(a);
  239. vec5.pb(b);
  240. vec5.pb(z);
  241. }
  242. }
  243.  
  244. }
  245. else if(row==1)
  246. {
  247. x=vec2[0];
  248. y=vec2[1];
  249. z=vec2[2];
  250. if(i==0)
  251. {
  252. vec5.clear();
  253. vec4=vec;
  254. vec6=vec3;
  255. if(col==2)
  256. {
  257. vec5.pb(x);
  258. vec5.pb(z);
  259. vec5.pb(y);
  260.  
  261. }
  262. else if(col==1)
  263. {
  264. vec5.pb(y);
  265. vec5.pb(x);
  266. vec5.pb(z);
  267. }
  268. }
  269. else if(i==1)
  270. {
  271. vec5.clear();
  272. vec4=vec;
  273. vec6=vec3;
  274. if(col==0)
  275. {
  276. vec5.pb(y);
  277. vec5.pb(x);
  278. vec5.pb(z);
  279. }
  280. else if(col==1)
  281. {
  282. vec5.pb(x);
  283. vec5.pb(z);
  284. vec5.pb(y);
  285. }
  286. }
  287. else if(i==2)
  288. {
  289. vec5.clear();
  290. vec6.clear();
  291. vec4=vec;
  292. a=vec3[0];
  293. b=vec3[1];
  294. c=vec3[2];
  295. if(col==0)
  296. {
  297. vec5.pb(a);
  298. vec5.pb(y);
  299. vec5.pb(z);
  300.  
  301. vec6.pb(x);
  302. vec6.pb(b);
  303. vec6.pb(c);
  304. }
  305. else if(col==1)
  306. {
  307. vec5.pb(x);
  308. vec5.pb(b);
  309. vec5.pb(z);
  310.  
  311. vec6.pb(a);
  312. vec6.pb(y);
  313. vec6.pb(c);
  314.  
  315. }
  316. else if(col==2)
  317. {
  318. vec5.pb(x);
  319. vec5.pb(y);
  320. vec5.pb(c);
  321.  
  322. vec6.pb(a);
  323. vec6.pb(b);
  324. vec6.pb(z);
  325.  
  326. }
  327. }
  328. else if(i==3)
  329. {
  330. vec4.clear();
  331. vec5.clear();
  332. vec6=vec3;
  333. a=vec[0];
  334. b=vec[1];
  335. c=vec[2];
  336. if(col==0)
  337. {
  338. vec4.pb(x);
  339. vec4.pb(b);
  340. vec4.pb(c);
  341.  
  342. vec5.pb(a);
  343. vec5.pb(y);
  344. vec5.pb(z);
  345. }
  346. else if(col==1)
  347. {
  348. vec4.pb(a);
  349. vec4.pb(y);
  350. vec4.pb(c);
  351.  
  352. vec5.pb(x);
  353. vec5.pb(b);
  354. vec5.pb(z);
  355. }
  356. else if(col==2)
  357. {
  358. vec5.pb(x);
  359. vec5.pb(y);
  360. vec5.pb(c);
  361.  
  362. vec4.pb(a);
  363. vec4.pb(b);
  364. vec4.pb(z);
  365. }
  366. }
  367.  
  368. }
  369. else if(row==2)
  370. {
  371. x=vec3[0];
  372. y=vec3[1];
  373. z=vec3[2];
  374. if(i==0)
  375. {
  376. vec6.clear();
  377. vec4=vec;
  378. vec5=vec2;
  379. if(col==2)
  380. {
  381. vec6.pb(x);
  382. vec6.pb(z);
  383. vec6.pb(y);
  384.  
  385. }
  386. else if(col==1)
  387. {
  388. vec6.pb(y);
  389. vec6.pb(x);
  390. vec6.pb(z);
  391. }
  392. }
  393. else if(i==1)
  394. {
  395. vec6.clear();
  396. vec5=vec2;
  397. vec4=vec;
  398. if(col==0)
  399. {
  400. vec6.pb(y);
  401. vec6.pb(x);
  402. vec6.pb(z);
  403. }
  404. else if(col==1)
  405. {
  406. vec6.pb(x);
  407. vec6.pb(z);
  408. vec6.pb(y);
  409. }
  410. }
  411. else if(i==3)
  412. {
  413. vec6.clear();
  414. vec5.clear();
  415. vec4=vec;
  416. a=vec2[0];
  417. b=vec2[1];
  418. c=vec2[2];
  419. if(col==0)
  420. {
  421. vec5.pb(x);
  422. vec5.pb(b);
  423. vec5.pb(c);
  424.  
  425. vec6.pb(a);
  426. vec6.pb(y);
  427. vec6.pb(z);
  428. }
  429. else if(col==1)
  430. {
  431. vec5.pb(a);
  432. vec5.pb(y);
  433. vec5.pb(c);
  434.  
  435. vec6.pb(x);
  436. vec6.pb(b);
  437. vec6.pb(z);
  438. }
  439. else if(col==2)
  440. {
  441. vec5.pb(a);
  442. vec5.pb(b);
  443. vec5.pb(z);
  444.  
  445. vec6.pb(x);
  446. vec6.pb(y);
  447. vec6.pb(c);
  448. }
  449. }
  450. }
  451. indicate.clear();
  452. merge_(vec4,vec5,vec6);
  453. if(vis[indicate]==0)
  454. {
  455. answer++;
  456. // cout<<"i=="<<i<<endl;
  457. // prinn(vec4,vec5,vec6);
  458. vett.vec=vec4,vett.vec2=vec5,vett.vec3=vec6;
  459. qe.push(vett);
  460. vis[indicate]=1;
  461. dis[indicate]=dis[indicate2]+1;
  462. }
  463. }
  464. }
  465. }
  466. return -1;
  467. }
  468. void set_puzzle()
  469. {
  470. int i,a=1;
  471. for(i=0; i<8; i++)
  472. puzzle.pb(a++);
  473. puzzle.pb(0);
  474. // for(i=0;i<9;i++) cout<<puzzle[i]<<" ";
  475. }
  476. int main()
  477. {
  478. //freopen("input.txt","r",stdin);
  479. //freopen("output.txt","w",stdout);
  480. int i,j,n,m,a,c,b,d,ck,t,r,x,y,ans,rem,cnt,lo,hi,sum,row,col,cs=1;
  481. set_puzzle();
  482. cout<<"Enter the random 8 puzzle..\n";
  483. for(i=0; i<3; i++)
  484. {
  485. si(x);
  486. vec.pb(x);
  487. }
  488. for(i=0; i<3; i++)
  489. {
  490. si(x);
  491. vec2.pb(x);
  492. }
  493. for(i=0; i<3; i++)
  494. {
  495. si(x);
  496. vec3.pb(x);
  497. }
  498. ans=bfs();
  499. if(ans==-1)
  500. cout<<"Impossible to solve\n";
  501. else
  502. cout<<"minimum move to solve:"<<ans<<endl;
  503.  
  504. }
  505. /*
  506. goal:
  507. 1 2 3
  508. 4 5 6
  509. 7 8 0
  510.  
  511. input:
  512. 1 3 2
  513. 4 6 5
  514. 7 8 0
  515.  
  516. output: minimum moves to solve: 18
  517.  
  518. input:
  519. 1 2 3
  520. 4 5 6
  521. 7 0 8
  522. output: minimum moves to solve: 1
  523.  
  524. input:
  525. 1 2 3
  526. 4 5 6
  527. 8 7 0
  528. output: Impossible to solve\n
  529.  
  530. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement