您的位置:首页 > 其它

Snakes & ladders Arab and North African Region,2002 BFS

2013-02-17 19:00 239 查看
//题目的大概意思是又N*N的棋盘,编号从1 到 N*N 棋盘中分布着蛇和梯子玩家在位置1处,
//然后掷骰子,如果点数在梯子尾则顺着梯子到达梯子头,若掷到蛇头,则滑到蛇尾
//问最快到达终点所需掷的次数...
// 输入描述: 1表示1组数据,6 1 3分别表示棋盘大小,蛇的个数和梯子的个数
//35 25 表示蛇的头和尾巴     最后一行表示各个梯子的头和尾
/*
1
6 1 3
35 25
3 23 5 16 20 33
*/

#include<stdio.h>
#include<string.h>
#define NMAX 20
#define SLMAX 200
struct SandL
{
int from,to;
};
int main()
{
int D,N,S,L;
int grid[NMAX*NMAX+1];
int gridbak[NMAX*NMAX+1];
SandL jk[2*SLMAX];
int n,i,j,k,m;
int step,deal;
scanf("%d",&D);
for(i=0;i<D;i++)
{
scanf("%d%d%d",&N,&S,&L);
for(j=0;j<S+L;j++)
scanf("%d%d",&jk[j].from,&jk[j].to);
memset(grid,0,sizeof(grid));
grid[1]=1;
step=0;
while(grid[N*N]==0)
{
memcpy(gridbak,grid,sizeof(grid));
memset(grid,0,sizeof(grid));
for(j=1;j<N*N-1;j++)
{
if(gridbak[j]==0)
continue;
for(k=1;k<=6;k++)
{
deal=0;
if(j+k>N*N)
break;
for(m=0;m<S+L;m++)
if(jk[m].from==j+k)
{
grid[jk[m].to]=1;
deal=1;
break;
}
if(deal==0&&grid[j+k]==0)
grid[j+k]=1;
}
}
step++;
}
printf("%d\n",step);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: