hdu 3004 不错的搜索题(广搜)(二)
][a
.cy
]=='D'
) break; if(a
.cx
==a
.mx
&&a
.cy
==a
.my
) break; if(a
.cx
==a
.px
&&a
.cy
==a
.py
) break; if(mark
[a
.cx
][a
.cy
][a
.mx
][a
.my
][a
.px
][a
.py
]==0
) { mark
[a
.cx
][a
.cy
][a
.mx
][a
.my
][a
.px
][a
.py
]=1
; q
.push
(a
); } } } for(i
=0
;i
<4
;i
++) for(j
=1
;j
<=10
;j
++) { a
=b
; a
.step
=b
.step
+1
; a
.px
=dirt
[i
][0
]*j
+b
.px
; a
.py
=dirt
[i
][1
]*j
+b
.py
; if(a
.px
<0
||a
.px
>=n
||a
.py
<0
||a
.py
>=m
) break; if(map
[a
.px
][a
.py
]=='D'
) break; if(map
[a
.px
][a
.py
]=='S'
) break; if(a
.px
==a
.cx
&&a
.py
==a
.cy
) break; if(a
.px
==a
.mx
&&a
.py
==a
.my
) break; if(mark
[a
.cx
][a
.cy
][a
.mx
][a
.my
][a
.px
][a
.py
]==0
) { mark
[a
.cx
][a
.cy
][a
.mx
][a
.my
][a
.px
][a
.py
]=1
; q
.push
(a
); } } } if(flash
==0
) printf
("OH!That's impossible!\n"
); return 0
; } int main() { int i
,j
; int d
=1
; while(~scanf
("%d%d"
,&n
,&m
)) { int ci
,cj
,mi
,mj
,pi
,pj
; for(i
=0
;i
<n
;i
++) scanf
("%s"
,map
[i
]); for(i
=0
;i
<n
;i
++) for(j
=0
;j
<m
;j
++) { if(map
[i
][j
]=='C'
) { ci
=i
; cj
=j
; } else if(map
[i
][j
]=='M'
) { mi
=i
; mj
=j
; } else if(map
[i
][j
]=='P'
) { pi
=i
; pj
=j
; } else if(map
[i
][j
]=='S'
) { xx
=i
; yy
=j
; } } printf
("Scenario #%d\n"
,d
++); bfs
(ci
,cj
,mi
,mj
,pi
,pj
); printf
("\n"
); } return 0
; }