# Geometry# Math# Conditional Logic

d057 - 11494 - Queen

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算在 8x8 的西洋棋盤上,皇后從 (X1, Y1) 走到 (X2, Y2) 所需的最少步數。皇后可以沿水平、垂直或對角線方向移動任意格數。

解題思路

題目可以簡化為判斷兩個座標是否在同一條水平線、垂直線或對角線上。如果兩個座標相同,則步數為 0。如果兩個座標在同一條水平線或垂直線上,則步數為 1。如果兩個座標在同一條對角線上,則步數為 1。否則,步數為 2。程式直接根據這些條件進行判斷並輸出結果。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>

using namespace std;

int main(){
	std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    int a1,a2,b1,b2=0;
    while(cin >> a1 >> b1 >> a2 >> b2){
    	if(a1==0){
    		return 0;
		}
    	else if(a1==a2&&b1==b2){
    		cout << 0 << endl;
		}
		else if((a1==a2&&b1!=b2)||(a1!=a2&&b1==b2)){
			cout << 1 << endl;
		}
		else if((a1-a2)==(b1-b2)||(a1-a2)==-(b1-b2)){
			cout << 1 << endl;
		}
		else{
			cout << 2 << endl;
		}
	}
}

Discussion