• <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ī)矩陣比較復(fù)雜度是O(n^2), 我們可把2維的數(shù)組乘以一個(gè)一維數(shù)組  來(lái)比較
            通過(guò)這道題的測(cè)試,效果灰常讓人吃驚。。。

            常規(guī)比較的代碼用C++提交超時(shí),但是G++可以過(guò)掉,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 西風(fēng)蕭瑟 閱讀(2222) 評(píng)論(12)  編輯 收藏 引用 所屬分類(lèi): 圖論

            評(píng)論:
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:12 | oh no
            恕我無(wú)知,G++是什么語(yǔ)言?  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:20 | 西風(fēng)蕭瑟
            @oh no
            g++是GNU的c++編譯器而已 不是程序語(yǔ)言  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 10:31 | oh no
            我知道是編譯器,只是看到把它放在語(yǔ)言那欄下面
            我就覺(jué)得奇怪,怎么把C++和G++來(lái)比較?
            一個(gè)是語(yǔ)言,一個(gè)是編譯器  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-04 11:21 | 西風(fēng)蕭瑟
            @oh no
            呵呵,理解上的誤解吧,那個(gè)C++指的不是語(yǔ)言,而是Microsoft Visual C++編譯器   回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path[未登錄](méi) 2009-12-07 08:15 | TimTopCoder
            Microsoft Visual C++的編譯器在用戶(hù)不帶任何參數(shù)的時(shí)候是比g++快的,實(shí)際上它本身編譯的時(shí)候是帶了很多參數(shù)的,特別是release模式,比debug在性能和大小上都高出了許多。。。。但g++也可以通過(guò)在編譯時(shí)帶各種優(yōu)化參數(shù)達(dá)到。。只是記不下來(lái)那么多。。。  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 20:59 | akheyun
            你的意思是判兩個(gè)M*M的矩陣相等 只要判斷他們分別乘同一個(gè)M*1的矩陣之后是否相等是吧?  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 21:10 | 西風(fēng)蕭瑟
            @akheyun
            一般情況下可以,概率問(wèn)題。如果2個(gè)矩陣相等,那么轉(zhuǎn)化成的1維矩陣一定相等。
            否則,相等的概率很小很小  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-17 22:13 | akheyun
            @西風(fēng)蕭瑟
            存在兩個(gè)不同的矩陣 同乘1個(gè)矩陣后相等啊。。概率不小啊 貌似隨便都能列出些。。。
              回復(fù)  更多評(píng)論
              
            # 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  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-18 13:05 | 西風(fēng)蕭瑟
            @akheyun
            不好意思,你上面的例子是什么意思咯?
            比較的是[n*m] 的矩陣 乘以 [m*1] 的矩陣所得到的[n*1]的矩陣  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path 2009-12-19 22:56 | akheyun
            那個(gè)回復(fù)之后空格都縮回去了。。 其實(shí)是兩個(gè)矩陣。。 我知道最后比較的是【n*1】的矩陣, 但是有很多情況下不同的[n*m]矩陣乘1個(gè)相同的[m*1]矩陣得到的[n*1]矩陣是相同的。。  回復(fù)  更多評(píng)論
              
            # re: 矩陣的快速比較 HDU2807 The Shortest Path[未登錄](méi) 2009-12-21 22:14 | 西風(fēng)蕭瑟
            @akheyun
            對(duì),但概率不是很大,除非你刻意的去找。對(duì)于[n*1]的矩陣,你可以用隨機(jī)函數(shù)生成,這樣更安全些。因?yàn)闆](méi)那么多巧合咯~O(∩_∩)O~  回復(fù)  更多評(píng)論
              
            久久综合伊人77777麻豆| 国产精品久久久久久久久鸭| 97精品国产97久久久久久免费 | 国产一区二区精品久久岳| 亚洲欧美日韩久久精品第一区| 日本久久中文字幕| 国产激情久久久久影院| 青青热久久综合网伊人| 久久国产免费观看精品| 欧美日韩中文字幕久久伊人| 久久久久这里只有精品| 久久人人爽爽爽人久久久| 精品久久久久久亚洲精品| 2021少妇久久久久久久久久| 中文字幕久久精品| 亚洲欧洲久久久精品| 久久伊人精品青青草原高清| 亚洲AV无码1区2区久久| 久久五月精品中文字幕| 亚洲伊人久久大香线蕉苏妲己| 亚洲天堂久久精品| 久久久久久久久无码精品亚洲日韩| 99久久99久久久精品齐齐| 国产精品久久久久蜜芽| 蜜臀av性久久久久蜜臀aⅴ| 久久伊人影视| 久久精品视屏| 国产毛片欧美毛片久久久| 日韩十八禁一区二区久久 | 人妻中文久久久久| 国产伊人久久| 99久久精品免费看国产一区二区三区 | 99久久99久久精品免费看蜜桃| 久久久久精品国产亚洲AV无码| 久久66热人妻偷产精品9| 精品国产99久久久久久麻豆 | 久久精品国产亚洲av日韩| 蜜臀久久99精品久久久久久小说 | 中文字幕精品无码久久久久久3D日动漫 | 漂亮人妻被黑人久久精品| 亚洲午夜久久久久妓女影院|