<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/multiply/">
    <title>Programming @ wiki</title>
    <link>http://w.atwiki.jp/multiply/</link>
    <atom:link href="https://w.atwiki.jp/multiply/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>Programming @ wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2007-07-05T23:15:52+09:00</dc:date>
    <utime>1183644952</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/21.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/multiply/pages/1.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/25.html">
    <title>complex</title>
    <link>https://w.atwiki.jp/multiply/pages/25.html</link>
    <description>
      **宣言
 c1 = complex&lt;double&gt;(1,2);
 c2 = complex&lt;int&gt;(2,3);

**操作

-実部、虚部の操作
 c.real();
 c.imag();

-絶対値
 abs(c);

-回転
 v = (v * complex&lt;double&gt; P(0,1) );

足したり引いたり掛けたりは普通にできる。


















.    </description>
    <dc:date>2007-07-05T23:15:52+09:00</dc:date>
    <utime>1183644952</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/12.html">
    <title>C++</title>
    <link>https://w.atwiki.jp/multiply/pages/12.html</link>
    <description>
      **主にSTLなど
-[[string]]
-[[list]]
-[[queue]]
-[[priority_queue]]
-[[stack]]
-[[map]]

-[[complex]]

-[[cinの使い方]]
-[[オペレータを実装する]]

**アルゴリズム

-[[素数]]
-[[ダイクストラ法]]
-[[巡回セールスマン問題]]

























































.    </description>
    <dc:date>2007-07-05T22:30:33+09:00</dc:date>
    <utime>1183642233</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/24.html">
    <title>巡回セールスマン問題</title>
    <link>https://w.atwiki.jp/multiply/pages/24.html</link>
    <description>
      巡回セールスマン問題を解くとき、はじめに隣接行列を定義しておく。
また、自分から自分へのコストは、後を楽にするためにINT-MAXとしておく。

こんな感じ。
&amp; 2 6 4
2 &amp; 4 6
6 4 &amp; 2
4 6 2 &amp;

&amp; = INT-MAX

動的計画法により解くので、コストを入れておく行列cost[cityNum-1][cityNum-1]も作っておく。

開始点のノードは0とする。

以下ソース

    
 void TSP (int size) {
 	
 	int i,j,step,ansVal,minVal;
 	
 	for(i=0;i&lt;size-1;i++) cost[i][0] = adj[i+1][0];
 	for(step=1;step&lt;size-1;++step) {
 		
 		for(i=0;i&lt;size-1;++i) {
 			minVal = INT_MAX;
 			for(j=0;j&lt;size-1;++j) {
 				if(i != j) minVal = min(minVal, (cost[j][step-1] + adj[i+1][j+1]) );
 			}
 			cost[i][step] = minVal;
 		}
 	}
 	
 	ansVal = INT_MAX;
     	for (i=0;i&lt;size-1;++i) ansVal = min(ansVal, cost[i][size-2]);
    	return;
 }    </description>
    <dc:date>2007-07-05T02:26:33+09:00</dc:date>
    <utime>1183569993</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/19.html">
    <title>ダイクストラ法</title>
    <link>https://w.atwiki.jp/multiply/pages/19.html</link>
    <description>
      1. 配列cost を用意する。cost の大きさは町の数と同じである。配列cost に最大値(INT_MAX)を入れておく。ただし、スタートの町だけは、cost の値を0 にしておく。
2. 配列usedFlag のすべての要素を0 で初期化しておく。これはまだ使用していないことを意味する。
3. すべての町i の中で、usedFlag[i]が0 で、かつ最小のcost[i]を持つ町x を探す。
4. 町x が見つからないか、町x のcost[i]が大きな値(INT_MAX)ならば、終了。
5. 町x を使用済みとする。（usedFlag[x] ← 1）
6. 町x を経由していける場所のコストを更新する。すなわち、町i に対して、cost[i] &gt; cost[x]+町x から町i へのコストならば、cost[i] = cost[x]+町x から町i へのコストとする。町i には町x からきたことを記録する。
7. 3に戻る。


 void dijkstra( istream &amp;is ) {
    int start, end;
    int usedFlag[matMax];
    int cost[matMax];
    int beforeCity[matMax];
  while( true ) {
    if ( !(is &gt;&gt; start &gt;&gt; end ) ) break;
  
  // 初期化
     for( i=0; i&lt;matMax; i++ ) usedFlag[i] = 0;
    for(i=0; i&lt;matNum; i++ ) cost[i] = INT_MAX;
  //最後の町は訪れたことにする  
    cost[end] = 0;
    
    while( true ) {
  // 使用済みでない最小の町を求める
       int minVal = INT_MAX;
      int min;
      for( i=0; i&lt;matNum; i++ ) {
         if ( usedFlag[i] == 0 &amp;&amp; minVal &gt; cost[i] ) {
            min = i;
            minVal = cost[i];
         }
      }
  //終了チェック
       if ( minVal == INT_MAX ) break;
  // 使用済にする
       usedFlag[min] = 1;
  // 町min から行ける町のcost を更新
       for( i=0; i&lt;matNum; i++ ) {
          if ( mat[min][i] &amp;&amp; cost[min]+mat[min][i] &lt; cost[i] ) {
             cost[i] = cost[min]+mat[min][i];
             beforeCity[i] = min;
       }
    }
  // 結果の出力
    bool firstFlag = true;
    while(true) {
       if ( firstFlag ) firstFlag = false;
       else cout &lt;&lt; &quot; &quot;;
       cout &lt;&lt; (start+1);
       if ( start == end ) break;
       start = beforeCity[ start ];
       cout &lt;&lt; endl;
    }
  }
 }    </description>
    <dc:date>2007-07-03T19:26:31+09:00</dc:date>
    <utime>1183458391</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/23.html">
    <title>priority_queue</title>
    <link>https://w.atwiki.jp/multiply/pages/23.html</link>
    <description>
      **宣言
 priority_[[queue]]&lt;int&gt; qu;  // int型の優先順位付きキューを生成
priority_queueはdefaultで大きい順(降順)ソートされるqueueである

**操作
基本的にqueueと一緒。
小さい順(昇順)ソートするには
 priority_queue&lt;int, vector&lt;int&gt;, greater&lt;int&gt; &gt; qu;
と宣言する。
また、要素の追加はpush()、取り出しはpop()で行う。






















.    </description>
    <dc:date>2007-06-28T14:12:54+09:00</dc:date>
    <utime>1183007574</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/22.html">
    <title>queue</title>
    <link>https://w.atwiki.jp/multiply/pages/22.html</link>
    <description>
      **宣言
    queue&lt;int&gt; qu;    // int型のキュー

**操作
-push
 qu.push( 10 );
-(Normalな)pop
 int i = qu.front();  //先頭の値を得る
 qu.pop();
-isEmpty
 qu.empty();
-size
 qu.size();


















.    </description>
    <dc:date>2007-06-28T14:10:01+09:00</dc:date>
    <utime>1183007401</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/21.html">
    <title>メモリ操作関数</title>
    <link>https://w.atwiki.jp/multiply/pages/21.html</link>
    <description>
      **memset
 void* memset(void* s, int c, size_t n);
例えば
 memset (str, &#039;\0&#039;, sizeof(str) );
で文字列の初期化ができる。

**memcpy
 void* memcpy(void* s1, const void* s2, size_t n);

**memcmp
 int memcmp(const void* s1, const void* s2, size_t n);
strcmp()の汎用版。超有用。

**memchr
 void* memchr(const void* s, int c, size_t n);
指定された範囲内から指定された値を検索して、見つかった場合にはそのアドレスを返す。














.    </description>
    <dc:date>2007-06-27T14:59:11+09:00</dc:date>
    <utime>1182923951</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/20.html">
    <title>C</title>
    <link>https://w.atwiki.jp/multiply/pages/20.html</link>
    <description>
      *いろいろ

-[[メモリ操作関数]]




























.    </description>
    <dc:date>2007-06-27T14:54:21+09:00</dc:date>
    <utime>1182923661</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/multiply/pages/2.html</link>
    <description>
      メニュー
-[[トップページ]]
-[[@wiki&gt;http://atwiki.jp]]

ページ内リンク
-[[C]]
-[[C++]]
-Java
-Python

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります    </description>
    <dc:date>2007-06-27T14:53:23+09:00</dc:date>
    <utime>1182923603</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/multiply/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/multiply/pages/1.html</link>
    <description>
      *Programming Wiki について
このwikiはC/C++,Java,Pythonその他プログラミング言語で、
有用だと感じたライブラリや関数、メソッドを記録しておくものです。

*言語
・[[C]]
・[[C++]]
・Java
・Python


































.    </description>
    <dc:date>2007-06-27T14:52:58+09:00</dc:date>
    <utime>1182923578</utime>
  </item>
  </rdf:RDF>
