這里的迷宮是由0 1表示的 0表示墻, 1表示能通過
這里我用了const int row=7,column=13;你當(dāng)然可以改動(dòng)這個(gè)參數(shù). 運(yùn)行后回把其中的一條路徑改成其它數(shù)字
你會(huì)看到的,
#include?
<
iostream
>
#include?
<
stack
>
using
?
namespace
?std;
const
?
int
?row?
=
?
7
;
const
?
int
?column?
=
?
13
;
int
?table[row][column];
//
struct?position{
??
//
??int?prow;
????
//
int?pcolumn;
//
};
void
?settable()

{
????
????cout
<<
"
Please?input?table[
"
;
????cout
<<
row
<<
"
][
"
;
????cout
<<
column;
????cout
<<
"
](using?0?or?1):\n
"
;
????
for
(
int
?i
=
0
;i
<
row;i
++
)?
????????
for
(
int
?j
=
0
;j
<
column;j
++
)
????????????cin
>>
table[i][j];
????
//
cout<<"Input?1?go?on?and?0?end:\n";
????
}
int
?solvepass(stack
<
int
>
?
&
P,
int
?i,
int
?j)

{
????
int
?count
=
0
;
???
//
?int?count1=0;
????
while
(i
!=
row
-
1
?
||
?j
!=
column
-
1
)

????
{
????????count
=
0
;
???????
//
?count1=0;
????????
if
(i
-
1
>=
0
?
&&
?table[i
-
1
][j]
==
1
)?

????????
{
????????????count
=
1
;
????????????table[i][j]
=
9
;
????????????P.push(i);P.push(j);?
//
?cout<<"i="<<i<<"?j="<<j<<endl;
????????????i
-=
1
;?
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????
continue
;
????????}
????????
if
(i
+
1
<
row?
&&
?table[i
+
1
][j]
==
1
)

????????
{
????????????count
=
1
;
????????????table[i][j]
=
9
;
????????????P.push(i);P.push(j);
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????i
+=
1
;
//
cout<<"i="<<i<<"?j="<<j<<endl;
?????????????
continue
;
????????}
?
????????
if
(j
-
1
>=
0
?
&&
?table[i][j
-
1
]
==
1
)

????????
{
????????????count
=
1
;
????????????table[i][j]
=
9
;
????????????P.push(i);P.push(j);
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????j
-=
1
;?
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????
continue
;
????????}
????????
if
(j
+
1
<
column?
&&
?table[i][j
+
1
]
==
1
)

????????
{
????????????count
=
1
;
????????????table[i][j]
=
9
;
????????????P.push(i);P.push(j);
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????j
+=
1
;
//
?cout<<"i="<<i<<"?j="<<j<<endl;
????????????
continue
;
????????}
????????
if
(count
==
0
)

????????
{
????????????
int
?n
=
P.top();
????????????P.pop();
????????????
int
?m
=
P.top();
????????????P.pop();
????????????table[i][j]
=
2
;
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????????i
=
m;j
=
n;
//
cout<<"i="<<i<<"?j="<<j<<endl;
????????}
???????
//
?else?return?1;
???????
//
?count1=1;
????}
?????
?????P.push(row
-
1
);P.push(column
-
1
)?;
??????table[row
-
1
][column
-
1
]
=
9
;
}
void
?outputtable()

{
????
//
cout<<"Result?table?is:\n";
????
for
(
int
?i
=
0
;i
<
row;i
++
)

????
{
????????cout
<<
endl;
????????
for
(
int
?j
=
0
;j
<
column;j
++
)
????????????cout
<<
table[i][j]
<<
"
?
"
;
????????}
}
void
?outputpass(stack
<
int
>&
P)

{
????stack
<
int
>
?S;
????cout
<<
"
\nThe?result?pass?is:\n
"
;
????
while
(
!
P.empty())

????
{
????????
int
?sp
=
P.top();
????????P.pop();?
????????
int
?q
=
P.top();??P.pop();
????????S.push(q);?S.push(sp);
????????
????}
????
while
(
!
S.empty())

????
{
????????
int
?j
=
S.top();
????????S.pop();
????????
int
?i
=
S.top();
????????S.pop();
????????cout
<<
"
(
"
<<
i
<<
"
,
"
<<
j
<<
"
)?\n
"
;
????}
}
int
?main()

{
????
//
int?row,column;
????
//
int?table[row][column];
????stack
<
int
>
?P;
//
save?the?pass?ways
????
int
?s;
????cout
<<
"
Input?1?go?on?and?0?end:\n
"
;
????
while
(cin
>>
s)

????
{
????????
if
(
!
s)?
break
;
????????settable();?
//
set?table
????????cout
<<
"
\nThe?orenage?table?is:\n
"
;
????????outputtable();
????????solvepass(P,
0
,
0
);?
//
solve?this?problem
????????cout
<<
"
\nThe?result?table?is:\n
"
;
????????outputtable();
????????outputpass(P);
????????cout
<<
"
Input?1?go?on?and?0?end:\n
"
;
????}
????
return
?
1
;
}

































































































































































