जगह में स्थानांतरित करने का एक आसान तरीका मैट्रिक्स के पीछे से प्रत्येक तत्व को स्थानांतरित करना है। आप केवल इतना उदाहरण के लिए, [0,1,2,3,4,5,6,7,8,9,a,b]
के साथ शुरू, आप मिलता है, एक समय में जगह में एक भी तत्व बारी बारी से करने की जरूरत है: (। यह सिर्फ तत्वों हर कदम पर उनके अंतिम स्थिति में घुमाया से पता चलता)
0,1,2,3,4,5,6,7,8,9,a,b, // step 0
,b, // step 1
,8,9,a,7, // step 2
4,5,6,8,9,a,3, // step 3
,a, // step 4
,8,9,6, // step 5
,4,5,8,9,2, // step 6
,9, // step 7
,8,5, // step 8
,4,8,1, // step 9
,8, // step 10
,4, // step 11
0, // step 12
यदि आप लिखते हैं कि प्रत्येक तत्व (पीछे से आगे तक) के लिए घूमने के लिए कितने तत्व हैं, तो यह एक अच्छी प्रगति बनाता है।
1,4,7,1,3,5,1,2,3,1,1,1
या एक थोड़ा बेहतर संरचित तरीके में,: उदाहरण (width= 4
, height= 3
) के लिए
1 तत्व की
1,4,7,
1,3,5,
1,2,3,
1,1,1
घुमाव को प्रभावी ढंग से कोई-ऑप्स रहे हैं, लेकिन प्रगति एक बहुत ही सरल करने के लिए सुराग (सी ++ में) कलन विधि: यह करने के लिए
void transpose(int *matrix, int width, int height)
{
int count= width*height;
for (int x= 0; x<width; ++x)
{
int count_adjustment= width - x - 1;
for (int y= 0, step= 1; y<height; ++y, step+= count_adjustment)
{
int last= count - (y+x*height);
int first= last - step;
std::rotate(matrix + first, matrix + first + 1, matrix + last);
}
}
}
क्या आप कार्य में ऊंचाई और चौड़ाई को जानते हैं? यदि नहीं, तो इसे आयताकार के रूप में प्रदर्शित करने के कई तरीके हैं। –
ओ (एम * एन) सहायक का उपयोग करने के लिए "उचित रूप से सरल" तरीके, वैसे भी वे चीजों को स्वैप करते हैं। – harold
हां मुझे हाथ से पहले ऊंचाई और चौड़ाई पता है। –