ページ 11

構造体ポインタを用いたを使用したリストについて

Posted: 2011年8月12日(金) 00:37
by ザックジャパン
先日「dijkstra法を用いた最短距離迷路探索」という課題が出され、構造体ポインタの使用方法(具体的にはメモリの動的確保)が理解できずここ数日悩み続けています。1or2次元配列を用いたプログラムでは組めたのですが、この課題では指定されたヘッダファイルを用いて分割コンパイルしなければならず、記載されたプログラムの意味がいまいち理解できないのでどなたかに回答をいただければと思い質問することにしました。

[1]具体的な質問点
[1.1] 構造体MAZE内で宣言されている各種ポインタの取り扱い方法=dijkstra法との繋げ方。
[1.2] ファイルのパスとは開く対象のファイル名と認識して良いのか。
[1.3] [ファイルに文字列を書き込み/ファイルに文字列を書き込む]の処理の違い。

質問[1.1]についてなのですが、最初は構造体ポインタを用いたノードのリスト構造を作成するのかと思ったのですが、自分は以下に示す典型的なものの理解しかなく今回のようなパターンはどうすれば良いのか見当もつきません。一度(MAZE->cost + 1 = 1)みたいに無理矢理繋げようとした所やはりセグメントエラーが出てしまいました。

長文になってしまってすいません、回答の程よろしくお願いしますm(_ _)m

struct vertex{
int class;
int address;
struct vertex *next; ←これがないとお手上げ;;
}
struct vertex *top, *new;

top = NULL;
while(1){
new = (struct vertex*)malloc(struct vertex);
new->class = 1;
new->address = 1;
new->next = top;
top = new;
}

[2] 環境  
 [2.1] OS : Linux
 [2.2] コンパイラ名 : gcc
[2.3] 言語: C

[3] C言語理解度:基本情報を取得したばかり。

コード:

#ifndef MAZE_DEFINE
#define MAZE_DEFINE

#define COST_MAX 30000

//迷路構造体
typedef struct tagMAZE{
	int nodecount;		//全体のノード数を記憶
	int startindex;		//スタート位置を記憶
	int goalindex;		//ゴール位置を記憶
	char* maze;		//迷路情報
	char* donenode;   //使用済みフラグを記憶
	int* cost;			//最小コスト
	int* from;			//最小コストを提供するノード
	int width;			//迷路の横幅
	int height;			//迷路の縦幅
}MAZE;

//ファイルを開き迷路情報を構造体に記憶する関数
//mazefilepath:ファイルのパス←arg_pathのスペルミス?(謎)
MAZE* create_maze(char *arg_path);

#endif

コード:

#ifndef FILE_DEFINE
#define FILE_DEFINE

//ファイルサイズを取得
//filepath:サイズを取得したいファイルのパスです
long get_file_size(char* arg_path);

//ファイルに文字列を書き込み
//arg_str:書き込みたい文字列
//arg_fp:書き込む対象のファイルのポインタ
void write_string(char *arg_str, FILE* arg_fp);

//指定したファイルに文字列を出力.
//arg_path:保存するファイル名
//arg_str:ファイルに書き込む文字列
void output_string(char *arg_path, char *arg_str);

//指定したファイル内のデータを全て読み込み
//arg_path:データを読み込むファイルのパス
char* load_string(char *arg_path);

#endif

Re: 構造体ポインタを用いたを使用したリストについて

Posted: 2011年8月12日(金) 00:50
by ザックジャパン
読み込むファイルの形状(.txt)を明記するのを忘れていたので追記します。

******
*S *   *
*     **
**     *
*   *  *
**   G *
******

*:壁、S:スタート,G:ゴール

他にも足りないものがあれば仰って下さい。

Re: 構造体ポインタを用いたを使用したリストについて

Posted: 2011年8月12日(金) 20:53
by non
残念ながら、私にはわかりませんので、無視しようと思いましたが、どなたからもRESがないので、すこし意見を。

もし、授業で説明もなく、いきなりこのような課題が出されて、わかる人がいるとは思えません。

上記構造体を使わずに自由に解いてよいのなら解けますが、先生がどのような意図であの構造体にしているのかを、
あれだけで、知ることはできません。まして、ファイルの出力なんて課題のどこにも書かれていないじゃないですか。
探路の道筋を、ファイルに出力しろとか課題にあるのなら兎も角、想像では何もわかりません。

先生に聞くか、ちゃんと授業を理解している友人に聞くべきでしょう。

Re: 構造体ポインタを用いたを使用したリストについて

Posted: 2011年8月13日(土) 21:59
by ザックジャパン
それが説明はほとんどがダイクストラ法のもので、関数の説明は記載した内容で完結してる感じなので・・・
一度教授に質問してみます。 

回答ありがとうございましたm(_ _)m