poj_1573 构造

思路:构造模型


#include<iostream>

using namespace std;

int N[2] = {-1,0};
int S[2] = {1,0};
int E[2] = {0,1};
int W[2] = {0,-1};
char map[12][12] = {'Q'};
int flag[12][12]={0};

int main()
{
	int row, col, start;
	char s[10];
	int i, j;
	while ((cin >> row >> col >> start) && ((row != 0) || (col != 0) || (start != 0)))
	{
		//clear map and flag
		for (i = 0; i < 12; i++)
		{
			for (j = 0; j < 12; j++)
			{
				map[i][j] = 'Q';
				flag[i][j]=0;
			}
		} 
		//set map data
		for (i = 0; i < row; i++)
		{
			cin >> s;
			for (j = 0; j < col; j++)
			{
				map[i + 1][j + 1] = s[j];
			}
		}
		//function	start_location=[1][start]
		int over=0;
		int loc_x=1;
		int loc_y=start;
		int step=0;
		int loop=0;
		flag[loc_x][loc_y]=1;
		while (1)
		{
			switch(map[loc_x][loc_y])
			{
				case 'N':
					loc_x=loc_x+N[0];
					loc_y=loc_y+N[1];
					break;
				case 'S':
					loc_x=loc_x+S[0];
					loc_y=loc_y+S[1];
					break;
				case 'E':
					loc_x=loc_x+E[0];
					loc_y=loc_y+E[1];
					break;
				case 'W':
					loc_x=loc_x+W[0];
					loc_y=loc_y+W[1];
					break;
			}
			if(flag[loc_x][loc_y]==2)
			{
				over=2;
				break;
			}
			if(flag[loc_x][loc_y]==1)
			{
				flag[loc_x][loc_y]=2;
				loop++;
			}
			if(flag[loc_x][loc_y]==0)
			{
				flag[loc_x][loc_y]=1;
				step++;
			}
			if(map[loc_x][loc_y]=='Q')
			{
				over=1;
				break;
			}

		}//end while
		if(over==1)
		{
			cout<<step<<" step(s) to exit"<<endl;
		}
		else
		{
			cout<<step-loop+1<<" step(s) before a loop of "<<loop<<" step(s)"<<endl;
		}
	}
	//system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值