螺旋矩陣問題


問題描述
  對於一個 n 行 m 列的表格,我們可以使用螺旋的方式給表格依次填上正整數,我們稱填好的表格為一個螺旋矩陣。
  例如,一個 4 行 5 列的螺旋矩陣如下:
  1 2 3 4 5
  14 15 16 17 6
  13 20 19 18 7
  12 11 10 9 8
輸入格式
  輸入的第一行包含兩個整數 n, m,分別表示螺旋矩陣的行數和列數。
  第二行包含兩個整數 r, c,表示要求的行號和列號。
輸出格式
  輸出一個整數,表示螺旋矩陣中第 r 行第 c 列的元素的值。
樣例輸入
4 5
2 2
樣例輸出
15
評測用例規模與約定
  對於 30% 的評測用例,2 <= n, m <= 20。
  對於 70% 的評測用例,2 <= n, m <= 100。
  對於所有評測用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。
 1 #include<iostream>
 2 using namespace std;
 3 struct circle{
 4     int x1,x2;
 5     int y1,y2;
 6 };
 7 int main()
 8 {
 9     int n,m;
10     int r,c;
11     cin>>n>>m;
12     cin>>r>>c;
13     int total=n*m;
14     int a=n/2;
15     if(n%2!=0)
16     {
17         a++;
18     }
19     circle q[a];
20     int x1=1,x2=n;
21     int y1=1,y2=m;
22     for(int i=0;i<a;i++)
23     {
24         q[i].x1=x1;
25         q[i].x2=x2;
26         q[i].y1=y1;
27         q[i].y2=y2;
28         x1++;
29         x2--;
30         y1++;
31         y2--;
32     }
33     int num=0;
34     for(int i=a-1;i>=0;i--)
35     {
36         if(r>=q[i].x1&&r<=q[i].x2&&c>=q[i].y1&&c<=q[i].y2)
37         {
38             for(int j=0;j<i;j++)
39             {
40                 num=num+(q[j].y2-q[j].y1+1)*2+(q[j].x2-q[j].x1-1)*2;
41                 
42             }
43             if(r==q[i].x1)
44             {
45                 num=num+c-q[i].y1+1;
46             }
47             else if(c==q[i].y2)
48             {
49                 num=num+(q[i].y2-q[i].y1+1)+r-q[i].x1;
50             }
51             else if(r==q[i].x2)
52             {
53                 num=num+(q[i].y2-q[i].y1+1)+(q[i].x2-q[i].x1-1)+q[i].y2-c+1; 
54             }
55             else
56             {
57                 num=num+(q[i].y2-q[i].y1+1)*2+(q[i].x2-q[i].x1-2)+q[i].x2-r+1;
58             }
59             cout<<num<<endl;
60             return 0;
61         }
62     }
63 }

做了老久了,做完了搜一搜題解,再和算法書上的一對比,測試了幾個用例,答案都一樣。所以我覺得我應該是寫對了吧。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM