Esempio n. 1
0
		string toStringRoute(Route route)
		{
			std::ostringstream os;
			int movement = route.top();
			route.pop_back();
			if (movement == -1) return "";
			auto result = toStringRoute(route);
			os << result << (result == "" ? "" : ", ");
			string name[] = { "up", "right", "down", "left" };
			os << name[movement];
			//os << movement;
			return os.str();
		}
Esempio n. 2
0
		void calcRoutes_4(int lookAheadCount)
		{
			//route, length
			std::queue<std::tuple<Route, int>> que;
			que.emplace(Route(), 0);

			for (int i = 0; i < LookAheadMax; i++)
			{
				_routes[i].clear();
			}

			//bfsでルートを全列挙
			while (!que.empty())
			{
				auto tup = que.front(); que.pop();
				int length = std::get<1>(tup);
				Route route = std::get<0>(tup);

				_routes[length].push_back(route);

				//debug(route);

				if (length == lookAheadCount)
				{
					continue;
				}

				int pre = route.top();
				for (int i = 0; i < 4; i++)
				{
					if ((i + 2) % 4 == pre) continue;//行って戻るのは禁止

					Route nextRoute = route;
					nextRoute.push_back(i);
					que.emplace(nextRoute, length + 1);

				}
			}
		}