アルゴリズムで過去4日間立ち往生しています。私は Mahjong Safari タイプのゲーム ( http://www.pogo.com/games/mahjongsafari ) に取り組んでおり、タイルの数が最も少ない 2 つのタイル間のパスを開発したいと考えています。
Manhattan Hueristic で A* アルゴリズムを既に適用しましたが、それはターン数の多い最短パスを生成します。最短経路は必要ありません。最小ターン (できれば 2) の経路が必要なだけです。以下は、2 つのタイルの間にパスを生成する Mahjong Safari ゲームの画像です。A から B へのパスと B から A へのパスが異なることがわかります。
コード、アルゴリズム名、または機能すると思われるロジックで、私を助けてください。
編集:私がこれに適用したソリューション:
最初に本物の A* アルゴリズムを使用して最短経路を見つけ、マンハッタン距離をヒューリスティックな目標推定値として使用しました。パスをよりまっすぐにし、ターン数が最も少ないパスを選択するために、各反復で次の戦術を使用しました。
Tile first = currentNode.parent;
Tile curr = currentNode;
Tile last = successorOfCurrentNode;
if (first != null)
{
if ((first.X == curr.X && first.Y != curr.Y) && (curr.Y == last.Y && curr.X != last.X))
{
// We got turn
currentNode.Cost += 10;
currentNode.calcuateTotalCost();
successorOfCurrentNode.Cost += 5;
successorOfCurrentNode.calcuateTotalCost();
}
else if ((first.X != curr.X && first.Y == curr.Y) && (curr.X == last.X && curr.Y != last.Y))
{
// We got turn
currentNode.Cost += 10;
currentNode.calcuateTotalCost();
successorOfCurrentNode.Cost += 5;
successorOfCurrentNode.calcuateTotalCost();
}
}