#include<stdio.h>
#include<stdlib.h>
#define sizestack 1000
char ch[8][8];
int mark[8][8];
struct Stack
{
int *top;
int *base;
}th;
void road()
{
int i,newx,newy;
int a[4]={0,-1,0,1};//hang
int b[4]={-1,0,1,0};//lie
newx=*(th.top-1)%10;//lie
newy=*(th.top-1)/10;//hang
for(i=0;i<4;i++){
if(newx+b[i]>=0&&newx+b[i]<8&&newy+a[i]>=0&&newy+a[i]<8&&mark[newy+a[i]][newx+b[i]]==0&&ch[newy+a[i]][newx+b[i]]!='@'){//入栈
newy=newy+a[i];
newx=newx+b[i];
*(th.top)=newy*10+newx;
th.top++;
mark[newy][newx]=1;
break;
}
}
if(i==4){
if(th.top!=th.base){
th.top=th.top-1;
road();
}
}
else {
if(ch[*(th.top-1)/10][*(th.top-1)%10]!='E')
road();
}
}
int main()
{
th.base=(int *)malloc(sizeof(int)*sizestack);
th.top=th.base;
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
scanf("%c",&ch[i][j]);
if(ch[i][j]=='S'){
*th.top=i*10+j;
th.top++;
}
}
getchar();
}
mark[*(th.base)/10][*(th.base)%10]=1;
road();
if(th.top==th.base)
printf("NO\n");
else {
while(1){
printf("(%d %d) ",*(th.top-1)/10,*(th.top-1)%10);
if(th.top==th.base)
break;
th.top--;
}
printf("\n");
for(i=0;i<8;i++){
for(j=0;j<8;j++)
printf("%d",mark[i][j]);
printf("\n");
}
}
return 0;
@@@@@@@@
.....S..
@@....@@
@@@@@...
@@@...@@
@@...@@@
@@...@@@
@@@@...E
@@@@@@@E
@@@@@...
@@@@@...
@@@@@@..
@@@@@S@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
*/
#include<stdlib.h>
#define sizestack 1000
char ch[8][8];
int mark[8][8];
struct Stack
{
int *top;
int *base;
}th;
void road()
{
int i,newx,newy;
int a[4]={0,-1,0,1};//hang
int b[4]={-1,0,1,0};//lie
newx=*(th.top-1)%10;//lie
newy=*(th.top-1)/10;//hang
for(i=0;i<4;i++){
if(newx+b[i]>=0&&newx+b[i]<8&&newy+a[i]>=0&&newy+a[i]<8&&mark[newy+a[i]][newx+b[i]]==0&&ch[newy+a[i]][newx+b[i]]!='@'){//入栈
newy=newy+a[i];
newx=newx+b[i];
*(th.top)=newy*10+newx;
th.top++;
mark[newy][newx]=1;
break;
}
}
if(i==4){
if(th.top!=th.base){
th.top=th.top-1;
road();
}
}
else {
if(ch[*(th.top-1)/10][*(th.top-1)%10]!='E')
road();
}
}
int main()
{
th.base=(int *)malloc(sizeof(int)*sizestack);
th.top=th.base;
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
scanf("%c",&ch[i][j]);
if(ch[i][j]=='S'){
*th.top=i*10+j;
th.top++;
}
}
getchar();
}
mark[*(th.base)/10][*(th.base)%10]=1;
road();
if(th.top==th.base)
printf("NO\n");
else {
while(1){
printf("(%d %d) ",*(th.top-1)/10,*(th.top-1)%10);
if(th.top==th.base)
break;
th.top--;
}
printf("\n");
for(i=0;i<8;i++){
for(j=0;j<8;j++)
printf("%d",mark[i][j]);
printf("\n");
}
}
return 0;
}
样例
@@@@@@@@
.....S..
@@....@@
@@@@@...
@@@...@@
@@...@@@
@@...@@@
@@@@...E
@@@@@@@E
@@@@@...
@@@@@...
@@@@@@..
@@@@@S@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
*/