私自身のMatrixクラスを開発しました。コンストラクタはファイルから行列を読み込みます。マトリックスには自由な細胞と「壁」があります。また、コンストラクタは、幅優先検索(Start_pointからFinish_Pointまでの最短方法を見つけるため)の開始点と終了点を読み込みます。ここ は、ヘッダのコードです:私は定義したい//MyMatrix.hファイルクラスメソッドとしてのインライン関数
#ifndef __MYMATRIX_H__
#define __MYMATRIX_H__
#include <tchar.h>
#include <iostream>
#include <deque>
//using namespace std;
#define MAX_MATRIX_SIZE 1000
#define FREE_CELL_SIGNIFICATION '0'
#define BALL_SIGNIFICATION 'B'
#define UP_SIGNIFICATION 'U'
#define DOWN_SIGNIFICATION 'D'
#define LEFT_SIGNIFICATION 'L'
#define RIGHT_SIGNIFICATION 'R'
#define START_POINT_SIGNIFICATION 'S'
#define FINISH_POINT_SIGNIFICATION 'F'
typedef std::pair<int,int> Field_Point_Type;
//#define IS_RIGHT_NEIGHBOUR_REACHABLE(Current_Point) (((Current_Point.second+1) <= Column_Count)&&((Matrix_Field[Current_Point.first][Current_Point.second+1]==FREE_CELL_SIGNIFICATION)||(Matrix_Field[Current_Point.first][Current_Point.second+1]==FINISH_POINT_SIGNIFICATION))) ? true : false;
class Matrix {
private:
int Column_Count; //Cols
int Row_Count;//Rows
char** Matrix_Field;
Field_Point_Type Start_Point;
Field_Point_Type Finish_Point;
bool Matrix_Is_Correct;
public:
Matrix(_TCHAR* Input_File_Name);
int Breadth_first_search(unsigned int Start_X,unsigned int Start_Y,unsigned int Finish_X,unsigned int Finish_Y);
~Matrix();
inline int IS_RIGHT_NEIGHBOUR_REACHABLE(Field_Point_Type Current_Point);
};
//MyMatrix.cpp
...
inline int Matrix::IS_RIGHT_NEIGHBOUR_REACHABLE(Field_Point_Type Current_Point)
{
return (((Current_Point.second+1) <= Column_Count)&&((Matrix_Field[Current_Point.first][Current_Point.second+1]==FREE_CELL_SIGNIFICATION)||(Matrix_Field[Current_Point.first][Current_Point.second+1]==FINISH_POINT_SIGNIFICATION))) ? true : false;
}
...
ファイル
は、隣接セルは無料ですアルゴリズムの次のステップ。
if (((Current_Point.second+1) <= Column_Count)&&((Matrix_Field[Current_Point.first][Current_Point.second+1]==FREE_CELL_SIGNIFICATION)||(Matrix_Field[Current_Point.first][Current_Point.second+1]==FINISH_POINT_SIGNIFICATION))) {
//Adding of right cell to deque...
...
}
を、それは醜い: もちろん、私はこのために、このようなコードを使用することができます。私は、左、上、下のセルにそのようなチェックを追加するつもりです。 インライン関数(このように:inline int IS_RIGHT_NEIGHBOUR_REACHABLE(Field_Point_Type Current_Point);
)を実装したいと思います。
if (IS_RIGHT_NEIGHBOUR_REACHABLE(Current_Point)) {
//Adding of right cell to deque...
...
}
非常によく見えます! しかし、私はそのようなインライン関数の定義を以前に使用しておらず、誤ってそれを発見しました。 良いプログラミングスタイルですか? 私のクラス内で単純なint IS_RIGHT_NEIGHBOUR_REACHABLE(Field_Point_Type Current_Point);
メソッドを開発する方が良いですか? が、それは、このようなチェックを残す方が良いです:
if (((Current_Point.second+1) <= Column_Count)&&((Matrix_Field[Current_Point.first][Current_Point.second+1]==FREE_CELL_SIGNIFICATION)||(Matrix_Field[Current_Point.first][Current_Point.second+1]==FINISH_POINT_SIGNIFICATION))) {
//Adding of right cell to deque...
...
}
CPPファイルにインライン関数を実装しないでください! – Goz
(OT:[あなたの投稿に敬意を表して "Friends!"を入れないでください](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed- C++を先頭に置かないと、最も高いタグがページの 'title'に自動的に付加されます。そこにC++を挿入したい場合は、タイトル文の中にそれを流し込みます。 ) – Mat
OK、Mat。これで申し訳ありません。 –