日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

糊涂的教授【拓扑排序】

發布時間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 糊涂的教授【拓扑排序】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

糊涂的教授

題目大意:

有n個矩陣(有些部分重疊在一起),現在有一些位置寫著一些數字,表示它原來的序號,問每一個矩陣原來的序號

原題:

題目描述

陳教授是一個國際知名的教授,很多單位都爭先恐后邀請他演講,今天下午陳教授就要做一個非常重要的演講。由于陳教授年紀大了,對于一些不重要的小事情有點糊涂,今天上午他把自己做演講要用的幻燈片隨便堆放在一起。因此,演講之前他不得不去整理這些幻燈片。由于時間很緊,他希望盡可能簡單地完成它。情況是這樣,陳教授這次演講一共要用 n 張幻燈片(n<=26),這 n 張幻燈片按照演講要使用的順序已經用數字 1,2,…,n 在上面編上了號。因為幻燈片是透明的,所以我們不能一下子看清每一個數字所對應的幻燈片。
現在我們用大寫字母 A,B,C,…再次把幻燈片依次編上號,你的任務是編寫一個程序,把幻燈片的數字編號和字母編號對應起來,顯然這種對應應該是唯一的;若是出現多種對應的情況或是某些數字編號和字母對應不起來,我們就稱對應是無法實現的。

輸入

文件第一行只有一個數n,表示有 n 張幻燈片,接下來的 n 行第行包括 4 個整數 Xmin,Xmax,Ymin,Ymax (整數之間用空格分開),為幻燈片的坐標,這 n 張幻燈片按其在輸入文件中出現的順序從前到后依次編號為 A,B,C,…再接下來的 n 行依次為 n 個數字編號的坐標 X,Y,顯然在幻燈片之外是不會有數字的。

輸出

若是對應可以實現,你的輸出文件應該包括 n 行,每一行為一個字母和一個數字,中間以一個空格隔開,并且各行以字母的升序排列,注意輸出的字母要大寫并且頂格;反之,若是對應無法實現,在文件的第一行頂格輸出 None 即可。行首行末無多余空格。

輸入樣例

4 6 22 10 20 4 18 6 16 8 20 2 18 10 24 4 8 9 15 19 17 11 7 21 11

輸出樣例

A 4 B 1 C 2 D 3

解題思路:

一個點在多少個矩陣之中,為入讀,然后跑拓撲排序就可以了

代碼:

#include<cstdio> #define max(a,b) (a)>(b)?(a):(b) using namespace std; int n,k,p,num,ax,ay,x[30],xx[30],y[30],yy[30],l[30],pp[30],ans[30],a[30][30]; int main() {scanf("%d",&n);for (int i=1;i<=n;++i)scanf("%d %d %d %d",&x[i],&xx[i],&y[i],&yy[i]);for (int i=1;i<=n;++i){scanf("%d %d",&ax,&ay);for (int j=1;j<=n;++j)if (ax>=x[j]&&ax<=xx[j]&&ay>=y[j]&&ay<=yy[j])a[j][i]=1,l[j]++;}k=n;while (k){p=0;for (int i=1;i<=n;++i)if (l[i]==1)//可以確定了{k--;p=1;for (int j=1;j<=n;++j)if (a[i][j])//尋找連接的點{num=j;break;}for (int j=1;j<=n;++j)if (a[j][num])//相連的點入度-1{a[j][num]=0;l[j]--;}ans[i]=num;//記錄}if (!p){printf("None");break;}}if (p)for (int i=1;i<=n;++i)printf("%c %d\n",i+65-1,ans[i]);//輸出 }

總結

以上是生活随笔為你收集整理的糊涂的教授【拓扑排序】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。