• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            http://acm.hdu.edu.cn/showproblem.php?pid=2807

            常規(guī)矩陣比較復雜度是O(n^2), 我們可把2維的數(shù)組乘以一個一維數(shù)組  來比較
            通過這道題的測試,效果灰常讓人吃驚。。。

            常規(guī)比較的代碼用C++提交超時,但是G++可以過掉,1484MS

            #include <iostream>
            using namespace std;
            #define N 81
            #define INF 99999999
            int map[N][N], n, m;
            struct node{
                
            int Map[N][N];
            } rec[N];

            struct nnode{
                
            int Map[N];
            }recone[N];

            void cmp(int a, int x)
            {
                
            int i;
                
            for (i=1; i<=m; i++)        
                    
            if (recone[x].Map[i] != recone[0].Map[i])
                        
            return;
                map[a][x] 
            = 1;
            }

            void creat(int a, int b)
            {
                
            int i, j, k, s;
                
            for (i=1; i<=m; i++)
                {
                    recone[
            0].Map[i] = 0;
                    
            for (j=1; j<=m; j++)
                    {
                        recone[
            0].Map[i] += rec[a].Map[i][j] * recone[b].Map[j];            
                    }
                }
                    
                
            for (i=1; i<=n; i++)
                    
            if (i != a && i != b)
                        cmp(a, i); 
            //判斷 a 與 i的關(guān)系
            }

            int main()
            {
                
            int i, j, k;
                
            while (scanf("%d %d"&n, &m), n+m)
                {
                    
            for (i=1; i<=n; i++)
                        
            for (map[i][i]=0, j=i+1; j<=n; j++)
                            map[i][j] 
            = map[j][i] = INF; //初始化矩陣之間關(guān)系
                        
                        
            for (k=1; k<=n; k++)
                        {
                            
            for (i=1; i<=m; i++)
                            {
                                recone[k].Map[i] 
            = 0;
                                
            for (j=1; j<=m; j++)
                                {
                                    scanf(
            "%d"&rec[k].Map[i][j]);
                                    recone[k].Map[i] 
            += rec[k].Map[i][j] * j; //   2->1
                                }
                            }
                        } 
            // 接受矩陣信息
                        
                        
            for (i=1; i<=n; i++)
                            
            for (j=1; j<=n; j++)
                                
            if (i != j)
                                    creat(i, j); 
            // 處理矩陣 i*j
                                
                                
            for (k=1; k<=n; k++)
                                    
            for (i=1; i<=n; i++)
                                        
            for (j=1; j<=n; j++)
                                            
            if (map[i][k] + map[k][j] < map[i][j])
                                                map[i][j] 
            = map[i][k] +map[k][j];
                                            scanf(
            "%d"&m);
                                            
            while (m--)
                                            {
                                                scanf(
            "%d %d"&i, &j);
                                                
            if (map[i][j] != INF)
                                                    printf(
            "%d\n", map[i][j]);
                                                
            else
                                                    printf(
            "Sorry\n");
                                            }
                }
                
            return 0;
            }
            posted on 2009-12-04 09:05 西風蕭瑟 閱讀(2220) 評論(12)  編輯 收藏 引用 所屬分類: 圖論

            評論:
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:12 | oh no
            恕我無知,G++是什么語言?  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:20 | 西風蕭瑟
            @oh no
            g++是GNU的c++編譯器而已 不是程序語言  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:31 | oh no
            我知道是編譯器,只是看到把它放在語言那欄下面
            我就覺得奇怪,怎么把C++和G++來比較?
            一個是語言,一個是編譯器  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 11:21 | 西風蕭瑟
            @oh no
            呵呵,理解上的誤解吧,那個C++指的不是語言,而是Microsoft Visual C++編譯器   回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path[未登錄] 2009-12-07 08:15 | TimTopCoder
            Microsoft Visual C++的編譯器在用戶不帶任何參數(shù)的時候是比g++快的,實際上它本身編譯的時候是帶了很多參數(shù)的,特別是release模式,比debug在性能和大小上都高出了許多。。。。但g++也可以通過在編譯時帶各種優(yōu)化參數(shù)達到。。只是記不下來那么多。。。  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 20:59 | akheyun
            你的意思是判兩個M*M的矩陣相等 只要判斷他們分別乘同一個M*1的矩陣之后是否相等是吧?  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 21:10 | 西風蕭瑟
            @akheyun
            一般情況下可以,概率問題。如果2個矩陣相等,那么轉(zhuǎn)化成的1維矩陣一定相等。
            否則,相等的概率很小很小  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 22:13 | akheyun
            @西風蕭瑟
            存在兩個不同的矩陣 同乘1個矩陣后相等啊。。概率不小啊 貌似隨便都能列出些。。。
              回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 22:16 | akheyun
            @akheyun
            例如1 2 * 1 3 1 * 1
            2 4 2 2 4 2
            結(jié)果都是 5
            10  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-18 13:05 | 西風蕭瑟
            @akheyun
            不好意思,你上面的例子是什么意思咯?
            比較的是[n*m] 的矩陣 乘以 [m*1] 的矩陣所得到的[n*1]的矩陣  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-19 22:56 | akheyun
            那個回復之后空格都縮回去了。。 其實是兩個矩陣。。 我知道最后比較的是【n*1】的矩陣, 但是有很多情況下不同的[n*m]矩陣乘1個相同的[m*1]矩陣得到的[n*1]矩陣是相同的。。  回復  更多評論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path[未登錄] 2009-12-21 22:14 | 西風蕭瑟
            @akheyun
            對,但概率不是很大,除非你刻意的去找。對于[n*1]的矩陣,你可以用隨機函數(shù)生成,這樣更安全些。因為沒那么多巧合咯~O(∩_∩)O~  回復  更多評論
              
            久久夜色精品国产亚洲av| 国产欧美一区二区久久| 中文字幕精品久久| 久久久久亚洲AV无码专区首JN| 色欲综合久久躁天天躁| 久久青青草原精品国产软件| 亚洲Av无码国产情品久久| 久久久无码精品亚洲日韩蜜臀浪潮 | 国产精品久久久久国产A级| 亚洲成人精品久久| 欧美久久久久久午夜精品| 无码久久精品国产亚洲Av影片| 久久福利青草精品资源站| 女同久久| 777久久精品一区二区三区无码 | 久久综合亚洲色一区二区三区| 99久久无码一区人妻a黑| 国产精品久久久久久久app | 国产精品久久久久a影院| 久久国产精品-久久精品| 77777亚洲午夜久久多人| 久久伊人五月天论坛| 色成年激情久久综合| 亚洲精品无码久久久久去q | 精品免费tv久久久久久久| 久久精品国产亚洲AV香蕉| 国产午夜精品久久久久九九| 久久亚洲中文字幕精品一区| 久久er国产精品免费观看2| 久久综合综合久久综合| 久久亚洲AV成人无码| 久久久久国产一区二区三区| 夜夜亚洲天天久久| 老司机国内精品久久久久| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久久久se色偷偷亚洲精品av| 亚洲午夜无码久久久久小说| 久久婷婷五月综合97色直播| 久久精品国产色蜜蜜麻豆| 国产精品成人99久久久久| 国产精品久久久久乳精品爆|