《仙岛求药》一道广搜的题目 40分,求助
  • 板块学术版
  • 楼主yszxLiguizhi
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/5/24 13:21
  • 上次更新2024/5/24 17:33:44
查看原帖
《仙岛求药》一道广搜的题目 40分,求助
286657
yszxLiguizhi楼主2024/5/24 13:21

样例过,提交40分,不知道什么问题.

#include<bits/stdc++.h>
using namespace std;
int main() 
{
	for(int i=1;;i++)
	{
		int front=0,tail=1,dui[500][2]={0},p[500][500]={0},c[500]={0},shu,heng;
		char a[30][30]={'\0'};
		cin>>heng>>shu;
		if(heng==0&&shu==0)  break; 
		for(int i_heng=1;i_heng<=heng;i_heng++)
		{
			for(int i_shu=1;i_shu<=shu;i_shu++)
			{
				cin>>a[i_heng][i_shu];
				if(a[i_heng][i_shu]=='@')
				{
					dui[1][0]=i_heng;
					dui[1][1]=i_shu;
					p[i_heng][i_shu]=1;
					c[1]=0;
				} 
			}
		}		
		while(front<tail)
		{
			front++;
			int x=dui[front][0],y=dui[front][1];
			if(a[x+1][y]=='.'&&p[x+1][y]==0) //向下 
			{
				p[x+1][y]=1;
				tail++;
				dui[tail][0]=x+1;
				dui[tail][1]=y;//入队 
				c[tail]=c[front]+1;//层加1
			}
			else if(a[x+1][y]=='*')
			{
				cout<<c[front]+1<<endl;	
				break;
			}
			if(a[x][y+1]=='.'&&p[x][y+1]==0) //向右 
			{
				p[x][y+1]=1;
				tail++;
				dui[tail][0]=x;
				dui[tail][1]=y+1;//入队 
				c[tail]=c[front]+1;//层加1
			}
			else if(a[x][y+1]=='*')
			{
				cout<<c[front]+1<<endl;
				break;
			}
			if(a[x-1][y]=='.'&&p[x-1][y]==0) //向上 
			{
				p[x-1][y]=1;
				tail++;
				dui[tail][0]=x-1;
				dui[tail][1]=y;//入队 
				c[tail]=c[front]+1;//层加1
			}
			else if(a[x-1][y]=='*')
			{
				cout<<c[front]+1<<endl;	
				break;
			}
			if(a[x][y-1]=='.'&&p[x][y-1]==0) //向左 
			{
				p[x][y-1]=1;
				tail++;
				dui[tail][0]=x;
				dui[tail][1]=y-1;//入队 
				c[tail]=c[front]+1;//层加1
			}
			else if(a[x][y-1]=='*')
			{
				cout<<c[front]+1<<endl;
				break;	
			}
	    }
		if(front==tail) cout<<-1<<endl;
	}
    return 0; 
}
2024/5/24 13:21
加载中...