Competitive/Collaborative Programming Class

ICPC Computer Programming Contest Prep

Problem Solving in Computer Science

Spring 2015 -- CSC 2700 Section 01

[Isaac's Home Page ]  [Mailing List ]  [Class Page ]  [Normal ]  

week08/f/DungeonMaster.rtf

{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
{\fonttbl\f0\fnil\fcharset0 Consolas;\f1\fnil\fcharset0 Consolas-Italic;\f2\fnil\fcharset0 Consolas-Bold;
}
{\colortbl;\red255\green255\blue255;\red170\green170\blue170;\red236\green236\blue236;\red51\green51\blue51;
\red153\green153\blue137;\red255\green255\blue255;\red153\green153\blue153;\red72\green85\blue134;\red64\green151\blue151;
\red135\green20\blue16;\red195\green35\blue72;\red56\green133\blue176;}
\margl1440\margr1440\vieww9000\viewh8400\viewkind0
\deftab720

\itap1\trowd \taflags1 \trgaph108\trleft-108 \trbrdrt\brdrnil \trbrdrl\brdrnil \trbrdrt\brdrnil \trbrdrr\brdrnil 
\clvertalc \clshdrawnil \clwWidth540\clftsWidth3 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \gaph\cellx4320
\clvertalc \clshdrawnil \clwWidth14840\clftsWidth3 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \gaph\cellx8640
\pard\intbl\itap1\pardeftab720\sl320\qr

\f0\fs24 \cf2 \cb3 1\
2\
3\
4\
5\
6\
7\
8\
9\
10\
11\
12\
13\
14\
15\
16\
17\
18\
19\
20\
21\
22\
23\
24\
25\
26\
27\
28\
29\
30\
31\
32\
33\
34\
35\
36\
37\
38\
39\
40\
41\
42\
43\
44\
45\
46\
47\
48\
49\
50\
51\
52\
53\
54\
55\
56\
57\
58\
59\
60\
61\
62\
63\
64\
65\
66\
67\
68\
69\
70\
71\
72\
73\
74\
75\
76\
77\
78\
79\
80\
81\
82\
83\
84\
85\
86\
87\
88\
89\
90\
91\
92\
93\
94\
95\
96\
97\cell 
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f1\i \cf5 \cb6 /*
\f0\i0 \cf4 \

\f1\i \cf5   532 - Dungeon Master
\f0\i0 \cf4 \

\f1\i \cf5   Randall Head
\f0\i0 \cf4 \

\f1\i \cf5 */
\f0\i0 \cf4 \
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f2\b \cf7 #include <algorithm>
\f0\b0 \cf4 \

\f2\b \cf7 #include <iostream>
\f0\b0 \cf4 \

\f2\b \cf7 #include <iterator>
\f0\b0 \cf4 \

\f2\b \cf7 #include <numeric>
\f0\b0 \cf4 \

\f2\b \cf7 #include <sstream>
\f0\b0 \cf4 \

\f2\b \cf7 #include <fstream>
\f0\b0 \cf4 \

\f2\b \cf7 #include <cassert>
\f0\b0 \cf4 \

\f2\b \cf7 #include <climits>
\f0\b0 \cf4 \

\f2\b \cf7 #include <cstdlib>
\f0\b0 \cf4 \

\f2\b \cf7 #include <cstring>
\f0\b0 \cf4 \

\f2\b \cf7 #include <string>
\f0\b0 \cf4 \

\f2\b \cf7 #include <cstdio>
\f0\b0 \cf4 \

\f2\b \cf7 #include <vector>
\f0\b0 \cf4 \

\f2\b \cf7 #include <cmath>
\f0\b0 \cf4 \

\f2\b \cf7 #include <queue>
\f0\b0 \cf4 \

\f2\b \cf7 #include <deque>
\f0\b0 \cf4 \

\f2\b \cf7 #include <stack>
\f0\b0 \cf4 \

\f2\b \cf7 #include <list>
\f0\b0 \cf4 \

\f2\b \cf7 #include <map>
\f0\b0 \cf4 \

\f2\b \cf7 #include <set>
\f0\b0 \cf4 \
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f2\b \cf4 using
\f0\b0  
\f2\b namespace
\f0\b0  std;\
\
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f2\b \cf8 int
\f0\b0 \cf4  positionsX[\cf9 6\cf4 ]
\f2\b =
\f0\b0  \{\cf9 0\cf4 ,\cf9 0\cf4 ,\cf9 0\cf4 ,
\f2\b -
\f0\b0 \cf9 1\cf4 ,\cf9 0\cf4 ,\cf9 1\cf4 \};\

\f2\b \cf8 int
\f0\b0 \cf4  positionsY[\cf9 6\cf4 ]
\f2\b =
\f0\b0  \{\cf9 0\cf4 ,\cf9 0\cf4 ,
\f2\b -
\f0\b0 \cf9 1\cf4 ,\cf9 0\cf4 ,\cf9 1\cf4 ,\cf9 0\cf4 \};\

\f2\b \cf8 int
\f0\b0 \cf4  positionsL[\cf9 6\cf4 ]
\f2\b =
\f0\b0  \{\cf9 1\cf4 ,
\f2\b -
\f0\b0 \cf9 1\cf4 ,\cf9 0\cf4 ,\cf9 0\cf4 ,\cf9 0\cf4 ,\cf9 0\cf4 \};\
\
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f2\b \cf4 typedef
\f0\b0  
\f2\b struct
\f0\b0  edge\{\
\'a0\'a0
\f2\b \cf8 int
\f0\b0 \cf4  l,r,c;\
\}edge;\
\
\pard\intbl\itap1\pardeftab720\sl320\ql\qnatural

\f2\b \cf8 int
\f0\b0 \cf4  L,R,C;\

\f2\b \cf8 int
\f0\b0 \cf4  visited[\cf9 30\cf4 ][\cf9 30\cf4 ][\cf9 30\cf4 ];\
\

\f2\b \cf8 bool
\f0\b0 \cf4  
\f2\b \cf10 validPosition
\f0\b0 \cf4 (
\f2\b \cf8 int
\f0\b0 \cf4  l, 
\f2\b \cf8 int
\f0\b0 \cf4  r, 
\f2\b \cf8 int
\f0\b0 \cf4  c, vector
\f2\b <
\f0\b0 vector
\f2\b <
\f0\b0 vector
\f2\b <\cf8 char\cf4 >
\f0\b0  
\f2\b >
\f0\b0  
\f2\b >
\f0\b0  
\f2\b *
\f0\b0 graph)\{\
\'a0\'a0\'a0\'a0
\f2\b if
\f0\b0 ((l
\f2\b <
\f0\b0 L 
\f2\b &&
\f0\b0  l
\f2\b >=
\f0\b0 \cf9 0\cf4 ) 
\f2\b &&
\f0\b0  (r
\f2\b <
\f0\b0 R 
\f2\b &&
\f0\b0  r
\f2\b >=
\f0\b0 \cf9 0\cf4 ) 
\f2\b &&
\f0\b0  (c
\f2\b <
\f0\b0 C 
\f2\b &&
\f0\b0  c
\f2\b >=
\f0\b0 \cf9 0\cf4 ))\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b return
\f0\b0  (graph
\f2\b ->
\f0\b0 at(l)[r][c]
\f2\b ==
\f0\b0 \cf11 '.'
\f2\b \cf4 ||
\f0\b0 graph
\f2\b ->
\f0\b0 at(l)[r][c]
\f2\b ==
\f0\b0 \cf11 'E'\cf4 )
\f2\b ?
\f0\b0 \cf12 true
\f2\b \cf4 :
\f0\b0 \cf12 false\cf4 ;\
\'a0\'a0\'a0\'a0
\f2\b else
\f0\b0 \
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b return
\f0\b0  \cf12 false\cf4 ; \
\}\
\

\f2\b \cf8 int
\f0\b0 \cf4  
\f2\b \cf10 bfs
\f0\b0 \cf4 (edge start, edge end, vector
\f2\b <
\f0\b0 vector
\f2\b <
\f0\b0 vector
\f2\b <\cf8 char\cf4 >
\f0\b0  
\f2\b >
\f0\b0  
\f2\b >
\f0\b0  
\f2\b *
\f0\b0 graph)\{\
\'a0\'a0\'a0\'a0queue
\f2\b <
\f0\b0 edge
\f2\b >
\f0\b0  s;\
\'a0\'a0\'a0\'a0s.push(start);\
\'a0\'a0\'a0\'a0visited[start.l][start.r][start.c]
\f2\b =
\f0\b0 \cf9 0\cf4 ;\
\'a0\'a0\'a0\'a0
\f2\b while
\f0\b0  (s.empty() 
\f2\b ==
\f0\b0  \cf12 false\cf4 ) \{\
\'a0\'a0\'a0\'a0\'a0\'a0edge top 
\f2\b =
\f0\b0  s.front();\
\'a0\'a0\'a0\'a0\'a0\'a0s.pop();\
\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b if
\f0\b0 (end.l
\f2\b ==
\f0\b0 top.l 
\f2\b &&
\f0\b0  end.r
\f2\b ==
\f0\b0 top.r 
\f2\b &&
\f0\b0  end.c
\f2\b ==
\f0\b0 top.c)\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b return
\f0\b0  visited[top.l][top.r][top.c];\
\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b for
\f0\b0  (
\f2\b \cf8 int
\f0\b0 \cf4  i 
\f2\b =
\f0\b0  \cf9 0\cf4 ; i 
\f2\b <
\f0\b0  \cf9 6\cf4 ; 
\f2\b ++
\f0\b0 i)\{\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b \cf8 int
\f0\b0 \cf4  newl
\f2\b =
\f0\b0 top.l
\f2\b +
\f0\b0 positionsL[i],newr
\f2\b =
\f0\b0 top.r
\f2\b +
\f0\b0 positionsX[i],newc
\f2\b =
\f0\b0 top.c
\f2\b +
\f0\b0 positionsY[i];\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b if
\f0\b0 (validPosition(newl,newr,newc,graph))\{\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b if
\f0\b0 (visited[newl][newr][newc]
\f2\b ==-
\f0\b0 \cf9 1\cf4 )\{\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0visited[newl][newr][newc]
\f2\b =
\f0\b0 visited[top.l][top.r][top.c]
\f2\b +
\f0\b0 \cf9 1\cf4 ;\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0edge node 
\f2\b =
\f0\b0  \{newl,newr,newc\};\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0s.push(node);\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0
\f2\b return
\f0\b0  
\f2\b -
\f0\b0 \cf9 1\cf4 ;\
\}\
\

\f2\b \cf8 int
\f0\b0 \cf4  
\f2\b \cf10 main
\f0\b0 \cf4 ()\{\
\'a0\'a0
\f2\b \cf8 char
\f0\b0 \cf4  po;\
\'a0\'a0edge start,end;\
\'a0\'a0
\f2\b while
\f0\b0 (scanf(\cf11 "%d %d %d"\cf4 ,
\f2\b &
\f0\b0 L,
\f2\b &
\f0\b0 R,
\f2\b &
\f0\b0 C) 
\f2\b &&
\f0\b0  L 
\f2\b &&
\f0\b0  R 
\f2\b &&
\f0\b0  C)\{\
\'a0\'a0\'a0\'a0
\f1\i \cf5 //Reading the Graph :)
\f0\i0 \cf4 \
\'a0\'a0\'a0\'a0\'a0\'a0memset (visited,
\f2\b -
\f0\b0 \cf9 1\cf4 ,
\f2\b sizeof
\f0\b0 (visited));\
\'a0\'a0\'a0\'a0\'a0\'a0vector
\f2\b <
\f0\b0 vector
\f2\b <
\f0\b0 vector
\f2\b <\cf8 char\cf4 >
\f0\b0  
\f2\b >
\f0\b0  
\f2\b >
\f0\b0  graph;\
\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b for
\f0\b0  (
\f2\b \cf8 int
\f0\b0 \cf4  i 
\f2\b =
\f0\b0  \cf9 0\cf4 ; i 
\f2\b <
\f0\b0  L; 
\f2\b ++
\f0\b0 i)\
\'a0\'a0\'a0\'a0\'a0\'a0\{ \
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0vector
\f2\b <
\f0\b0  vector
\f2\b <\cf8 char\cf4 >
\f0\b0  
\f2\b >
\f0\b0  level;\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b for
\f0\b0  (
\f2\b \cf8 int
\f0\b0 \cf4  j 
\f2\b =
\f0\b0  \cf9 0\cf4 ; j 
\f2\b <
\f0\b0  R; 
\f2\b ++
\f0\b0 j)\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\{\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0vector
\f2\b <\cf8 char\cf4 >
\f0\b0  row;\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b for
\f0\b0  (
\f2\b \cf8 int
\f0\b0 \cf4  k 
\f2\b =
\f0\b0  \cf9 0\cf4 ; k 
\f2\b <
\f0\b0  C; 
\f2\b ++
\f0\b0 k)\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\{\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0cin
\f2\b >>
\f0\b0 po;\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b if
\f0\b0 (po
\f2\b ==
\f0\b0 \cf11 'S'\cf4 )\{start.l
\f2\b =
\f0\b0 i;start.r
\f2\b =
\f0\b0 j;start.c
\f2\b =
\f0\b0 k;\}\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b else
\f0\b0  
\f2\b if
\f0\b0 (po
\f2\b ==
\f0\b0 \cf11 'E'\cf4 )\{end.l
\f2\b =
\f0\b0 i;end.r
\f2\b =
\f0\b0 j;end.c
\f2\b =
\f0\b0 k;\}\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0row.push_back(po);\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0level.push_back(row);\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0graph.push_back(level);\
\'a0\'a0\'a0\'a0\'a0\'a0\}\
\'a0\'a0\'a0\'a0\'a0\'a0
\f2\b \cf8 int
\f0\b0 \cf4  result 
\f2\b =
\f0\b0  bfs(start,end,
\f2\b &
\f0\b0 graph);\
\'a0\'a0\'a0\'a0\'a0\'a0(result 
\f2\b ==
\f0\b0  
\f2\b -
\f0\b0 \cf9 1\cf4 )
\f2\b ?
\f0\b0 printf(\cf11 "Trapped!\\n"\cf4 )
\f2\b :
\f0\b0 printf(\cf11 "Escaped in %d minute(s).\\n"\cf4 ,result);\
\'a0\'a0\}\
\'a0\'a0
\f2\b return
\f0\b0  \cf9 0\cf4 ;\
\}\cell \lastrow\row
}

The statements and opinions included in these pages are those of only. Any statements and opinions included in these pages are not those of Louisiana State University or the LSU Board of Supervisors.
© 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015