现在的位置: 首页 > 综合 > 正文

HDU 1240 Asteroids!

2013年03月13日 ⁄ 综合 ⁄ 共 1018字 ⁄ 字号 评论关闭

链接:点击打开链接

和 hdu 1253 胜利大逃亡基本一样,三维bfs,只是输入不同,这里给的起点,终点坐标是z y x,而不是x y z;这里注意一下就可以啦,我就是这里没注意,改错浪费很长时间。。

#include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
char a[11][11][11];
int b[11][11][11],A,B,C,A1,B1,C1,n;
int c[6][3]={{0,0,1},{0,0,-1},{1,0,0},{0,1,0},{-1,0,0},{0,-1,0}};
struct ss{
	int x,y,z,flag;
	};
void bfs(){
	int i,j,k;
	queue<ss>Q;
	memset(b,0,sizeof(b));
	ss p,s;
	p.x=C1,p.y=B1,p.z=A1,p.flag=0;
	b[C1][B1][A1]=1;
	Q.push(p);
	while(!Q.empty()){
		p=Q.front();
		Q.pop();
		if(p.x==C&&p.y==B&&p.z==A){
			printf("%d %d\n",n,p.flag);
			return;
			}
		for(i=0;i<6;i++){
			s=p;
			s.x+=c[i][0],s.y+=c[i][1],s.z+=c[i][2],s.flag+=1;
			if(s.x>=0&&s.x<n&&s.y>=0&&s.y<n&&s.z>=0&&s.z<n&&a[s.x][s.y][s.z]=='O'&&!b[s.x][s.y][s.z]){
				b[s.x][s.y][s.z]=1;
				Q.push(s);
				}
			}	
		} 
		printf("NO ROUTE\n");
	}
int main(){
	int i,j,k;
	char str[15];
	while(cin>>str>>n){
		for(i=0;i<n;i++)
		 for(j=0;j<n;j++)
		  for(k=0;k<n;k++)
		    cin>>a[i][j][k];
		    //for(i=0;i<n;i++)
		    //for(j=0;j<n;j++)
		    //for(k=0;k<n;k++)
			//printf("%c",a[i][j][k]); 
		    scanf("%d %d %d",&A1,&B1,&C1);
		    scanf("%d %d %d",&A,&B,&C);
		    cin>>str;
		    bfs();
		}
		return 0;
	}

抱歉!评论已关闭.