• ベストアンサー

プログラミング

またまた失礼します。 n×nの正方形の地図があるとします。地図の周囲を海とみなして海と隣接している水を表す点(湖、川)を海の点に変換するプログラムを作成したいのですが、勉強不足なのか、なかなかC言語プログラムを組めません。 実行例を示しますと、(陸→#、水→+、海→ー)  ++###+###+  #####+##+#  #######+##  ###++++###  ###+#+####  ###+++####  ######++##  #++++##++#  #+##+###++  ####+##### という地図が…  ーー###ー###ー  #####ー##+#  #######+##  ###++++###  ###+#+####  ###+++####  ######ーー##  #ーーーー##ーー#  #ー##ー###ーー  ####ー##### といった地図に変換したいんです。これが解ける方、いらっしゃいますか?いらっしゃったら、どうか教えてください。最初の地図は指定しても、しなくてもかまいません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ANo.1さんのコーディング例。。 #include <stdio.h> #define XSIZE 10 #define YSIZE 10 int map[YSIZE][XSIZE]={1,1,2,2,2,1,2,2,2,1,             2,2,2,2,2,1,2,2,1,2,             2,2,2,2,2,2,2,1,2,2,             2,2,2,1,1,1,1,2,2,2,             2,2,2,1,2,1,2,2,2,2,             2,2,2,1,1,1,2,2,2,2,             2,2,2,2,2,2,1,1,2,2,             2,1,1,1,1,2,2,1,1,2,             2,1,2,2,1,2,2,2,1,1,             2,2,2,2,1,2,2,2,2,2}; char sym[3][3]={"-","+","#"}; void disp_map(void) {  int i,j;  for (i=0;i<YSIZE;i++) {   for (j=0; j<XSIZE; j++) {    printf("%s",sym[map[i][j]]);   }   printf("\n");  }  printf("\n"); } void henkan(int x, int y) {  if (map[y][x]==2) return; /* 陸なら何もしない */  if (map[y][x]==1) {   map[y][x]=0; /* 海に変える */   if (x>0) henkan(x-1,y); /* 左を調べる */   if (x<XSIZE-1) henkan(x+1,y); /* 右を調べる */   if (y>0) henkan(x,y-1); /* 上を調べる */   if (y<YSIZE-1) henkan(x,y+1); /* 下を調べる */  } } int main(void) {  int i;  disp_map();  for (i=0;i<XSIZE;i++) {   henkan(i, 0); /* 上の辺 */   henkan(i, YSIZE-1); /* 下の辺 */  }  for (i=0;i<YSIZE;i++) {   henkan(0,i); /* 左の辺 */   henkan(XSIZE-1,i); /* 右の辺 */  }  disp_map();  return 0; }

kozukozuhito
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.1

上の辺、右の辺、下の辺、右の辺の各点について調べ、もし水だったらその座標を関数fに送る(名前は何でもよい) 関数fでは送られた座標の部分を海に変え上下左右座標が水だったらその座標を関数fに送る。 関数の中で自分自身を呼び出すのを再帰呼び出しといいます。 このアルゴリズムは塗りつぶしのアルゴリズムと同じです。 再帰呼び出し、塗りつぶしで検索すればもっとわかりやすい解説があります。 関数fの例 void f(int x,int y) { map[x][y]=MAP_SEE; if (map[x][y-1]==MAP_WATER) /*下*/ f(x,y-1); if (map[x+1][y]==MAP_WATER) /*右*/ f(x+1,y); if (map[x][y+1]==MAP_WATER) /*上*/ f(x,y+1); if (map[x-1][y]==MAP_WATER) /*左*/ f(x-1,y); }

kozukozuhito
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 水に関する質問です。

    湖や川などの水は、山から流れてきた水がたまって、海に流れるということですか?

  • C言語のプログラムに対する質問です。

    C言語のプログラムに対する質問です。 円に内接する正方形をその円に引き延ばす処理のソースコードをどうつくったらいいのかわかりません。  ・正方形と円の輪郭点の座標を配列に設定させる。  ・正方形からの対応点、どの点が円のどこに移動するのか。  ・円からみても、正方形からみても最短な点をマッチングする。  ・線形歪み というヒントがあります。 どなたか、教えて頂きたいです。よろしくお願いします。

  • 湖や川で海のルアーロッドを使っても平気ですか。

    湖や川で、本来は海で使うルアーロッドを使用して釣りをしても ちゃんと釣ることはできますか? 竿とリールは海の物でルアーは川のものを使おうと思っています。 その行為が他の方や魚、湖に悪影響が無ければ湖用の竿を買うお金が あまりないのでやってみようと思っています。 他に何か問題点があればそちらについてもお願いします。

  • プログラミング

    C言語で以下のプログラムを作成したいのですが教えてください。 水の量(L)を入力し、その水に含まれる水素および酸素の原子の数を表示するプログラムを作成する。 アボガドロ定数は6.02×10^23、水の分子量は18,水の重さは1ml=1gとしてよく、 入力される数値として浮動小数点数値に対応すること表示は指数表現で行う。 お願いします。

  • お盆です!お盆に水に入ると(川や海のことで風呂は除く)いけないって本当

    お盆です!お盆に水に入ると(川や海のことで風呂は除く)いけないって本当ですか?? 言い伝え?ことわざ? どうしてなのか?? 実際、経験された方は大丈夫でしたか!? すみません、質問がおかしかったので書き直しました(汗) 最初は 川や海、風呂は除くになってまして。。。 じゃ、どこの水!?って質問でしたm(__)mすみませんm(__)m あと池とか湖も入れてください。 グタグタ文章でごめんなさい!

  • 火山湖に生息する魚の起源

    火山湖というのは、火山活動によって出来たくぼ地に水が溜まって出来たもので、火口湖とカルデラ湖があるそうです。 そのどちらにも魚が生息していますよね? 雨水が溜まって出来たと思うのですが、まさか空から魚が降って来たのじゃないでしょう。水が溢れ出して川が出来、海に繋がった時、海から遡上して来たのでしょうか? 摩周湖に関しては人間が放流した魚が自然増殖したと説明されていますが、他の湖に関しては殆ど何も書かれていません。 スイスにも湖が数多くありますが、多分、どの湖にも魚はいると思います。これらの魚は氷河から流れて来たのでしょうか?そも、氷河には魚はいないと思うのですが・・・ よろしくお願いします。

  • 水は何度から ぬるい  冷たい

    人間は水は何度から ぬるい 冷たいと感じますか? 水道水、川の水、池の水、湖の水、海の水 ぬるいは何度? 冷たいは何度? 逆に 暖かいは何度? 熱いは何度? 一般論、皆さんの感覚 どちらでも構いません 教えてくれませんか?

  • さまざまな水深 教えてください

    日本の様々な水深について教えてください! ○一般的に、学校のプールというのは水深は何メートル?? ○一般的に、施設プール(遊園地、市民など)などのプールは何メートル?? ○一般的に、ホテルの温泉や有名温泉、露天風呂の水深は何メートル?? ○一般的に、家庭用の風呂は何メートル?? ○日本でいちばん深い水(海、湖、川など)はどこで何メートル?反対に、日本でいちばん浅い水(海、湖、川など)はどこで何メートル? 水深について深く知りたいと思っています。質問が多く、申し訳ないです。 宜しく御願いいたします。

  • 水に体の一部が入っている人間(アイドルなど)が載っている写真集

    お世話になります。 アイドルの写真集に海とかでの撮影は多そうだと思って探そうとしているのですが、どれに手をつけていいやら…。 迷ってしまったので、投稿しました。 海・川・湖など、水に体の一部(手・足など)をひたしたり入ったりしている人間が載っている写真集を探しています。 載っている人間は、アイドル(グラビアでも芸能人でもなんでもいいです)などで、有名無名・性別は問いません。 トロピカルな雰囲気の海や、幻想的な森の中の湖など、見ていて癒される感じを求めています。 おすすめがあったら、教えてもらえますでしょうか。 よろしくお願いいたします。

  • 電車、バスで行ける関西のキャンプ場

    9月中旬に家族でキャンプに行こうと思っています 車の免許を誰も持っていないので、電車、バスで行けるキャンプ場ご存じの方いらっしゃれば教えてください 海や川、湖など水があるところがいいのですが・・・ 大阪に住んでいます 関西地区でどこか良いところないですかね?