讨论 / WA70分,求解
mmmmmmmm 2013-10-30 05:19:00
点我顶贴 收藏 删除
#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<math.h>

#include<memory.h>

char num[101][101]={1};

int cou[101][2]={0}/*队列*/, pan[101][101]={0}/*判定是否走过*/, kun[101]/*答案*/;

int dx[4]={1, -1, 0, 0};/*行走状态:横坐标*/

int dy[4]={0, 0, 1, -1};/*行走状态:纵坐标*/

int n, m, ans=0;

void lnm()

{

int i, j, k=0, t=1, p, x, y;

cou[0][0]=0;

cou[0][1]=0; //标示出发点;

pan[0][0]=1; //队列初始化;

kun[0]=0; //

while(k!=t)

{

for(p=0; p<4; p++)

{

x=cou[k][0]+dx[p];

y=cou[k][1]+dy[p];

if(pan[x][y]==0&&num[x][y]!='1'&&x>=0&&y>=0&&x<n&&y<m) //判定是否能行走的条件

{

cou[t][0]=x;

cou[t][1]=y;

pan[x][y]=1; //进入队列;

kun[t]=kun[k]+1;

if(num[x][y]>='A'&&num[x][y]<='Z') //传送门条件

{

for(i=0; i<n; i++)

for(j=0; j<m; j++)

{

if(num[i][j]==num[x][y]&&(i!=x||j!=y)) //搜索另一个传送门

{

cou[t][0]=i;

cou[t][1]=j; //位置传送

}

}

}

if(cou[t][0]==n-1&&cou[t][1]==m-1) //得出答案的条件

ans=kun[t];

t++;

}

}

k++;

}

}

int main()

{

int i, j, a, b, c;

freopen("boss.in", "r", stdin);

freopen("boss.out", "w", stdout);

scanf("%d%d", &n, &m);

for(i=0; i<n; i++) //输入地图

scanf("%s", &num[i]);

lnm();

if(ans!=0) //有答案则输出答案,无答案则输出No Solution.

printf("%d", ans);

else

printf("No Solution.");

system("pause");

return 0;

}

#1 107229HR@2013-10-30 05:19:00
回复 删除
system("pause");

为何不0分?

查看更多回复
提交回复