• <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

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

            常規比較的代碼用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的關系
            }

            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; //初始化矩陣之間關系
                        
                        
            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++的編譯器在用戶不帶任何參數的時候是比g++快的,實際上它本身編譯的時候是帶了很多參數的,特別是release模式,比debug在性能和大小上都高出了許多。。。。但g++也可以通過在編譯時帶各種優化參數達到。。只是記不下來那么多。。。  回復  更多評論
              
            # 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個矩陣相等,那么轉化成的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
            結果都是 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]的矩陣,你可以用隨機函數生成,這樣更安全些。因為沒那么多巧合咯~O(∩_∩)O~  回復  更多評論
              
            国产精品久久久久久| 久久久久高潮综合影院| 久久精品国产69国产精品亚洲| 精品久久8x国产免费观看| 国产精品久久久久久影院| 久久亚洲天堂| 2021久久精品国产99国产精品| 久久99精品免费一区二区| 国产偷久久久精品专区| 品成人欧美大片久久国产欧美...| 久久综合成人网| 九九精品99久久久香蕉| 国产精品成人精品久久久| 久久国产欧美日韩精品免费| 99精品国产在热久久无毒不卡| 久久综合色区| 办公室久久精品| 亚洲国产精品无码久久一线 | 亚洲国产精品狼友中文久久久| 亚洲精品蜜桃久久久久久| 国产成人无码精品久久久免费| 亚洲欧洲日产国码无码久久99| 久久精品国产亚洲5555| 国产成人久久精品区一区二区| 区久久AAA片69亚洲| 久久精品18| 久久狠狠一本精品综合网| 99久久免费国产特黄| 午夜久久久久久禁播电影| 狠狠色丁香婷婷久久综合五月 | 99久久精品久久久久久清纯| 亚洲中文字幕无码久久2020| 久久人人爽人人爽人人片av麻烦 | 久久精品国产AV一区二区三区| 狠狠人妻久久久久久综合蜜桃 | 久久国产香蕉一区精品| 久久综合狠狠综合久久激情 | 久久r热这里有精品视频| 久久精品中文闷骚内射| 韩国免费A级毛片久久| 亚洲av伊人久久综合密臀性色|