ফাইনাল স্ট্যান্ড - বোকচন্দর জোড়কে পরাজিত করুন


25

ভূমিকা

তুমি একা এক দ্বীপে রয়েছ। মানবতার বাকী অংশটি মারা গেছে ( সম্ভবত ব্যবহারকারী 12345 এর কোডে বাগের কারণে )। জ্যাম্বি পাইরেট হর্ড আপনার দ্বীপে পৌঁছেছে এবং তারা অবিরাম। গাধা লাথি মারার বা বুদবুদ আঠা চিবানোর সময় এসেছে এবং আপনি সবাই বুদবুদ গাম।

সমস্যা

আমাদের ডুমসডে দৃশ্যের বিবরণটি একটি একক লাইনে 2 পূর্ণসংখ্যার দ্বারা বর্ণনা করা হয়েছে mএবং n। আপনার দ্বীপে আউটপোস্টগুলি অনন্যভাবে 1 থেকে শুরু করে গণনা করা হয়েছে m। নিম্নলিখিত nলাইন প্রতিটি তিন পূর্ণসংখ্যার রয়েছে x, yএবং zএকটি স্থান দ্বারা পৃথক করা হয়। xএবং yদুটি আউটপোস্টের অনন্য আইডি এবং zএটি তাদের মধ্যে পথে যে জম্বিগুলির মুখোমুখি হবে is

আপনি যখন কোনও পাথ ভ্রমণ করেন, আপনি zগোলাবারুদ হারাবেন এবং আপনি zজম্বিদের হত্যা করবেন । আপনি যদি আবার একই পথে ভ্রমণ করেন তবে দুর্ভাগ্যক্রমে আপনি একই ধরণের জম্বিগুলির মুখোমুখি হবেন। আপনি যখন একবার কোনও পথে যাত্রা করেন তখন সমস্ত আউটপোস্টগুলি +1 গোলাবারুদ তৈরি করে। আপনি ফাঁড়িতে 100 টি গোলাবারুদ দিয়ে শুরু করেন All সমস্ত ফাঁড়ি 0 টি গোলাবারুদ দিয়ে শুরু হয়। আপনি অবিলম্বে মারা যান যদি আপনার গোলাবারুদ সেই পথের জম্বি সংখ্যার চেয়ে বেশি হয় এবং আপনার গোলাবারুদের বাকী অংশ হত্যায় রূপান্তরিত হয়। এটাই আপনার চূড়ান্ত অবস্থান।

এমন একটি প্রোগ্রাম লিখুন যা কোনও প্রদত্ত দৃশ্যের জন্য আপনি যে সর্বোচ্চ পরিমাণ জম্বি মেরে ফেলতে পারেন তার আউটপুট দেয়। আপনি যদি অসীম সংখ্যক জম্বি মারতে পারেন তবে কেবল আউটপুট x

উদাহরণ ইনপুট

5 6
1 2 4
2 3 4
3 1 4
2 4 10
2 5 10
1 1 50

উদাহরণ আউটপুট

x

অনুমিতি

  • দুটি পাথের মধ্যে একটি পথ হবে be এটি 1 <= x/ y<= বলতে হয়m
  • মধ্যে একটি পাথ যদি xএবং yতালিকাভুক্ত না হয়, এটি ভ্রমণ করা যাবে না
  • একটি পথ দ্বি নির্দেশমূলক
  • 1 << m= 100
  • 1 << n= 500
  • স্ট্যান্ডিনের মাধ্যমে ইনপুট সরবরাহ করতে হবে, কোনও ফাইল থেকে পড়া বা প্রোগ্রামটির একক যুক্তি হিসাবে স্বীকৃতি দেওয়া উচিত এবং অবশ্যই এটি অবশ্যই উদাহরণের ফর্ম্যাটটি অনুসরণ করবে
  • আপনার প্রোগ্রামের রানটাইম নির্বিচারে বড় হতে পারে তবে অবশ্যই নির্ধারিতভাবে সীমাবদ্ধ হতে হবে

কয়েকটি সংখ্যক চরিত্রের কোডই জিতল!


প্রতিটি ফাঁড়ি 10 টি গোলাবারুদ দিয়ে শুরু করে? গ্রাফ কি অনিচ্ছাকৃত?
পিটার টেলর

2
এটি সম্ভবত একটি পরীক্ষার কেস রয়েছে যা আপনার গোলাবারুদকে কমিয়ে না ফেলে তবে সময় মতো পৌঁছতে পারে না এমন একটি পরীক্ষা করে একটি নির্দিষ্ট শ্রেণীর বাগগুলি প্রাক-শূন্য করাও দরকারী। (আমার যোগ করা উচিত যে আমি বর্তমান পরীক্ষার কেসটি সঠিক তা নিয়ে নিশ্চিত নই: আমার কাছে মনে হয় যে চক্রটির 1->1ব্যয় 49 ammo, এবং চক্রটির 1->2->3->1দাম দীর্ঘকালীন সময়ে 3 ammo হয়
পিটার টেলর

@PeterTaylor আমি আমার মন্তব্য উভয় প্রত্যাহার করতে কারণ মনে হয় যে আমি দৃষ্টান্ত ছিল দ্বিমুখী । সুতরাং আমাকে আবার শুরু করার অনুমতি দিন - সমস্ত পাথ দ্বি নির্দেশমূলক এবং সমস্ত ফাঁড়ি 0 দিয়ে শুরু হয় The উদাহরণটি এখন কাজ করা উচিত।
রেইনবোল্ট

@ রুশার: চমৎকার উদাহরণ! নিজেকে প্রকৃতপক্ষে অসীম টেকসই এটি দেখানোর জন্য আমাকে 45 টি পদক্ষেপ নিয়েছে। আমরা কি ধরে নিতে পারি যে সমস্ত আউটপোস্টগুলি পৌঁছনীয় হবে বা আপনি কী চান যে যেখানে আমাদের প্রধান গ্রাফ থেকে সংযোগ বিচ্ছিন্ন রয়েছে সেখানে মামলাটি পরিচালনা করতে পারি?
ক্লদিউ

1
আহ্ ... সুতরাং এ থেকে বি পদক্ষেপের প্রতিটি পদক্ষেপের জন্য প্রতিটি ফাঁড়ি একটি গোলাবারুদ "উত্পন্ন" করে এবং আপনি এটি পরিদর্শন না করা অবধি সেখানে রাখেন।
টোবিয়া

উত্তর:


14

জাভা ( কম বিদ্বেষপূর্ণ: 8415 5291 3301)

ঠিক আছে. মূলত, আমি বিব্রত হয়েছি কেউই কোনও সমাধান জমা দেয়নি। তাই কয়েক দিন আগে আমি এই সমস্যাটি সমাধান করার চেষ্টা শুরু করেছিলাম, খ / সি এটা দুর্দান্ত। । গিটহাবের মাধ্যমে আমার অগ্রগতি দেখতে সেই লিঙ্কটি অনুসরণ করুন।

সম্পাদন করা

নতুন সলভার সংস্করণ, আরও অনেকগুলি "গল্ফড", এমটি0 দ্বারা চিহ্নিত হিসাবে সংশোধন চক্র পরীক্ষক সহ। এটি ভিএম-তে কত স্মৃতি উপলব্ধ তা পরিবর্তন করে দ্রুত-ফরওয়ার্ডিং রুটগুলিকে সমর্থন করে। সর্বশেষ বিজি সম্পাদনা: বুঝতে পেরেছিলাম যে আমার কয়েকটি অন্যান্য ছোট সূচক ত্রুটি এবং অকাল অপ্টিমাইজেশান ছিল, এর ফলে বেশ কয়েকটি বিশাল পরিমাণের জয় বিবেচনা করতে ব্যর্থ হয়েছিল। সুতরাং যে সাবধানে স্থির। নতুন সংস্করণটি ছোট এবং নীচে উভয়ই। আমাদের রেফারেন্স রুটের জন্য, java -Xmx2GB ZombieHordeMinকৌশলটি কি খুব সুন্দরভাবে চালিত হয়েছে (সতর্ক হওয়া উচিত, এতে কিছুক্ষণ সময় লাগবে)।

কুল ফ্যাক্টয়েড

আকর্ষণীয় মোড়টিতে, 24 টির দৈর্ঘ্যের অনেকগুলি সমাধান রয়েছে এবং আমার সলভার MT0 এর থেকে পৃথক, তবে নীতিগতভাবে অভিন্ন, এটি বাদে সংযুক্ত অন্যান্য ফাঁড়িগুলিতে গিয়ে শুরু করে visiting1 । আকর্ষনীয়! সম্পূর্ণরূপে মানুষের অন্তর্নিহিত পাল্টা, তবে পুরোপুরি বৈধ।

সমাধান হাইলাইটস

সুতরাং এখানে আমার। এটি (আংশিক) গল্ফড, খ / সি এটি ক্ষতিকারক, প্রায়-নিষ্ঠুর-শক্তি সমাধানকারী। আমি একটি আইডিডিএফএস (পুনরাবৃত্তি গভীরতর গভীরতার প্রথম সন্ধান) অ্যালগরিদম ব্যবহার করি, সুতরাং এটি একটি দুর্দান্ত সাধারণ দ্রাবক যা এড়ায় না, তাই এটি ওপি-র প্রশ্নের উভয় অংশই সমাধান করে , যথা:

  • যদি একটি বিজয়ী রুট পাওয়া যায় (অসীম জম্বিগুলি), আউটপুট 'এক্স'।
  • যদি সমস্ত রুটে মৃত্যুর অবসান হয় (সসীম জম্বিগুলি), তবে নিহত সর্বাধিক সংখ্যক জম্বি আউটপুট দেয়।

এটিকে পর্যাপ্ত শক্তি, স্মৃতি এবং সময় দিন এবং এটি ঠিক এটি করবে, এমনকি ধীর-মৃত্যুর মানচিত্র। আমি এই সমাধানকারীটিকে উন্নত করার জন্য আরও কিছু সময় ব্যয় করেছি এবং আরও কিছু করা যায়, এখন এটি কিছুটা ভাল। আমি সেরা অসীম-জম্বি সমাধান সম্পর্কে এমটি 0 এর পরামর্শকেও সংহত করেছি এবং আমার উইন-চেকার থেকে বেশ কয়েকটি অকালীন অপটিমাইজেশন সরিয়ে নিয়েছি যা পূর্ববর্তী সংস্করণটি এটির সন্ধান থেকে বাধা পেয়েছিল এবং এখন আমি বাস্তবে বর্ণিত একটি এমটি0 এর সাথে খুব মিল খুঁজে পেয়েছি।

আরও কয়েকটি হাইলাইট:

  • উল্লিখিত হিসাবে, সংক্ষিপ্ততম বিজয়ী রুটটি খুঁজে পেতে একটি আইডিডিএফএস ব্যবহার করে।
  • যেহেতু এটি মূলত একটি ডিএফএস, তাই এটিও আবিষ্কার করবে যে প্রতিটি রুট আমাদের বীরের মৃত্যুর পরে শেষ হয় এবং বেশিরভাগ নিহত জম্বিদের ক্ষেত্রে "সেরা" রুটের খোঁজ রাখে। একজন বীর মরে!
  • গল্ফিংয়ের উদ্দেশ্যে মুছে ফেলা দেখার বিষয়টি আরও আকর্ষণীয় করার জন্য আমি অ্যালগরিদমটি চালিত করেছি। অসম্পূর্ণ সংস্করণটি দেখতে গিথুব-র একটি লিঙ্ক অনুসরণ করুন।
  • পাশাপাশি বেশ কয়েকটি মন্তব্য রয়েছে, সুতরাং আমার নিজের পদ্ধতির উপর নিজের সমাধানের বিল্ডিংয়ের জন্য পুনরায় বাস্তবায়নে নির্দ্বিধায় বা বোধ করি এটি কীভাবে করা উচিত!
  • মেমরি-অভিযোজিত রুট দ্রুত-ফরওয়ার্ডিং
    • উপলব্ধ সিস্টেমের মেমোরি অবধি, "শেষের রুটগুলি" ট্র্যাক করে রাখবে যার ফলস্বরূপ মৃত্যু হয় নি।
    • অভিনব রুট সংক্ষেপণ এবং সংক্ষেপণ রুটিন ব্যবহার করে, সমস্ত পূর্ববর্তী পরিদর্শনকৃত রুটগুলি পুনরায় আবিষ্কার রোধ করতে আইডিডিএফএসের পূর্ববর্তী পুনরাবৃত্তি থেকে অগ্রগতি পুনরুদ্ধার করা হয়।
    • ইচ্ছাকৃত পার্শ্ব-বোনাস হিসাবে, ডেড-এন্ড রুট কুল হিসাবে কাজ করে। শেষ প্রান্তের রুটগুলি সংরক্ষণ করা হয় না এবং ভবিষ্যতে আইডিডিএফএসের গভীরতায় আর কখনও দেখা হবে না।

সমাধানকারী ইতিহাস

  • আমি একগুচ্ছ এক-ধাপের চেহারা-এগিয়ে অ্যালগরিদম চেষ্টা করেছি এবং খুব সাধারণ দৃশ্যের জন্য তারা কাজ করবে, শেষ পর্যন্ত তারা সমতল হয়ে যায়।
  • তারপরে আমি দ্বি-পদক্ষেপের চেহারা-এগিয়ে অ্যালগরিদম চেষ্টা করেছি, যা ছিল .. অসন্তুষ্ট।
  • আমি তখন একটি এন-স্টেপ লুকোহেড তৈরি করা শুরু করি, যখন আমি বুঝতে পারি যে এই পদ্ধতিটি ডিএফএসে হ্রাসযোগ্য, তবুও ডিএফএস অনেক দূরে ... আরও মার্জিত।
  • ডিএফএস তৈরি করার সময়, আমার কাছে এটি ঘটেছিল যে আইডিডিএফএস নিশ্চিত করবে যে (ক) সেরা হিরো (মৃত্যু) রুট বা (খ) প্রথম বিজয়ী চক্রটি সন্ধান করবে।
  • উইন-সাইকেল চেকার তৈরি করা সহজ, তবে আমি সফলভাবে পরীক্ষক হিসাবে পৌঁছানোর আগে আমাকে বেশ কয়েকটি খুব ভুল পুনরাবৃত্তি করতে হয়েছিল।
  • অ্যালগরিদম এটির কাছে অন্ধ করে দিয়েছে এমন অকাল অপটিমাইজেশনের তিনটি লাইন সরিয়ে ফেলার জন্য এমটি 0 এর বিজয় পথে ফ্যাক্টার্ড।
  • আইডিডিএফএস কলগুলির মধ্যে অপ্রয়োজনীয় কাজ পুনরায় করা রোধ করতে আপনার দেওয়া সমস্ত মেমরি ব্যবহার করবে এবং মেমরির সীমা পর্যন্ত মৃত-শেষের পথগুলিও কমাবে এমন একটি অভিযোজিত রুট-ক্যাচিং অ্যালগরিদম যুক্ত করেছে।

(গল্ফড) কোড

কোডটিতে (অসম্পূর্ণ সংস্করণটি এখানে বা এখানে পান ):

import java.util.*;public class ZombieHordeMin{int a=100,b,m,n,i,j,z,y,D=0,R,Z,N;int p[][][];Scanner in;Runtime rt;int[][]r;int pp;int dd;int[][]bdr;int ww;int[][]bwr;int[][]faf;int ff;boolean ffOn;public static void main(String[]a){(new ZombieHordeMin()).pR();}ZombieHordeMin(){in=new Scanner(System.in);rt=Runtime.getRuntime();m=in.nextInt();N=in.nextInt();p=new int[m+1][m+1][N+1];int[]o=new int[m+1];for(b=0;b<N;b++){i=in.nextInt();j=in.nextInt();z=in.nextInt();o[i]++;o[j]++;D=(o[i]>D?o[i]:D);p[i][j][++p[i][j][0]]=z;if(i!=j)p[j][i][++p[j][i][0]]=z;D=(o[j]>D?o[j]:D);}m++;}void pR(){r=new int[5000][m+3];r[0][0]=a;Arrays.fill(r[0],1,m,1);r[0][m]=1;r[0][m+1]=0;r[0][m+2]=0;ww=-1;pp=dd=0;pR(5000);}void pR(int aMD){faf=new int[D][];ff=0;ffOn=true;for(int mD=1;mD<=aMD;mD++){System.out.printf("Checking len %d\n",mD);int k=ffR(0,mD);if(ww>-1){System.out.printf("%d x\n",ww+1);for(int win=0;win<=ww;win++)System.out.printf(" %d:%d,%d-%d",win,bwr[win][0],bwr[win][1],bwr[win][2]);System.out.println();break;}if(k>0){System.out.printf("dead max %d kills, %d steps\n",pp,dd+1);for(int die=0;die<=dd;die++)System.out.printf(" %d:%d,%d-%d",die,bdr[die][0],bdr[die][1],bdr[die][2]);System.out.println();break;}}}int ffR(int dP,int mD){if(ff==0)return pR(dP,mD);int kk=0;int fm=ff;if(ffOn&&D*fm>rt.maxMemory()/(faf[0][0]*8+12))ffOn=false;int[][]fmv=faf;if(ffOn){faf=new int[D*fm][];ff=0;}for(int df=0;df<fm;df++){dS(fmv[df]);kk+=pR(fmv[df][0],mD);}fmv=null;rt.gc();return kk==fm?1:0;}int pR(int dP,int mD){if(dP==mD)return 0;int rT=0;int dC=0;int src=r[dP][m];int sa=r[dP][0];for(int dt=1;dt<m;dt++){for(int rut=1;rut<=p[src][dt][0];rut++){rT++;r[dP+1][0]=sa-p[src][dt][rut]+r[dP][dt];for(int cp=1;cp<m;cp++)r[dP+1][cp]=(dt==cp?1:r[dP][cp]+1);r[dP+1][m]=dt;r[dP+1][m+1]=rut;r[dP+1][m+2]=r[dP][m+2]+p[src][dt][rut];if(sa-p[src][dt][rut]<1){dC++;if(pp<r[dP][m+2]+sa){pp=r[dP][m+2]+sa;dd=dP+1;bdr=new int[dP+2][3];for(int cp=0;cp<=dP+1;cp++){bdr[cp][0]=r[cp][m];bdr[cp][1]=r[cp][m+1];bdr[cp][2]=r[cp][0];}}}else{for(int chk=0;chk<=dP;chk++){if(r[chk][m]==dt){int fR=chk+1;for(int cM=0;cM<m+3;cM++)r[dP+2][cM]=r[dP+1][cM];for(;fR<=dP+1;fR++){r[dP+2][0]=r[dP+2][0]-p[r[dP+2][m]][r[fR][m]][r[fR][m+1]]+r[dP+2][r[fR][m]];for(int cp=1;cp<m;cp++)r[dP+2][cp]=(r[fR][m]==cp?1:r[dP+2][cp]+1);r[dP+2][m+2]=r[dP+2][m+2]+p[r[dP+2][m]][r[fR][m]][r[fR][m+1]];r[dP+2][m]=r[fR][m];r[dP+2][m+1]=r[fR][m+1];}if(fR==dP+2&&r[dP+2][0]>=r[dP+1][0]){ww=dP+1;bwr=new int[dP+2][3];for(int cp=0;cp<dP+2;cp++){bwr[cp][0]=r[cp][m];bwr[cp][1]=r[cp][m+1];bwr[cp][2]=r[cp][0];}return 0;}}}dC+=pR(dP+1,mD);if(ww>-1)return 0;}for(int cp=0;cp<m+3;cp++)r[dP+1][cp]=0;}}if(rT==dC)return 1;else{if(ffOn&&dP==mD-1)faf[ff++]=cP(dP);return 0;}}int[]cP(int dP){int[]cmp=new int[dP*2+3];cmp[0]=dP;cmp[dP*2+1]=r[dP][0];cmp[dP*2+2]=r[dP][m+2];for(int zip=1;zip<=dP;zip++){cmp[zip]=r[zip][m];cmp[dP+zip]=r[zip][m+1];}return cmp;}void dS(int[]cmp){int[]lv=new int[m];int dP=cmp[0];r[dP][0]=cmp[dP*2+1];r[dP][m+2]=cmp[dP*2+2];r[0][0]=100;r[0][m]=1;for(int dp=1;dp<=dP;dp++){r[dp][m]=cmp[dp];r[dp][m+1]=cmp[dP+dp];r[dp-1][cmp[dp]]=dp-lv[cmp[dp]];r[dp][m+2]=r[dp-1][m+2]+p[r[dp-1][m]][cmp[dp]][cmp[dP+dp]];r[dp][0]=r[dp-1][0]+r[dp-1][cmp[dp]]-p[r[dp-1][m]][cmp[dp]][cmp[dP+dp]];lv[cmp[dp]]=dp;}for(int am=1;am<m;am++)r[dP][am]=(am==cmp[dP]?1:dP-lv[am]+1);}}

আমি যে কোনও পরিবর্তনগুলি অনুসরণ করার জন্য গিথুব থেকে কোডটি এখানে পান । আমি ব্যবহার করেছি এমন আরও কিছু মানচিত্র এখানে দেওয়া হল।

আউটপুট উদাহরণ

রেফারেন্স সমাধানের জন্য আউটপুট উদাহরণ:

    $ java -d64 -Xmx3G ZombieHordeMin > reference_route_corrected_min.out
    5 6 1 2 4 2 3 4 3 1 4 2 4 10 2 5 10 1 1 50
    Checking len 1
    Checking len 2
    Checking len 3
    Checking len 4
    Checking len 5
    Checking len 6
    Checking len 7
    Checking len 8
    Checking len 9
    Checking len 10
    Checking len 11
    Checking len 12
    Checking len 13
    Checking len 14
    Checking len 15
    Checking len 16
    Checking len 17
    Checking len 18
    Checking len 19
    Checking len 20
    Checking len 21
    Checking len 22
    Checking len 23
    Checking len 24
    25 x
     0:1,0-100 1:3,1-97 2:1,1-95 3:2,1-94 4:5,1-88 5:2,1-80 6:4,1-76 7:2,1-68 8:1,1-70 9:2,1-68 10:1,1-66 11:2,1-64 12:1,1-62 13:2,1-60 14:1,1-58 15:2,1-56 16:1,1-54 17:2,1-52 18:1,1-50 19:2,1-48 20:1,1-46 21:2,1-44 22:1,1-42 23:2,1-40 24:1,1-38

এর মতো রুটের আউটপুটটি পড়ুন step:: source, route-to-get-here- ammo। সুতরাং উপরের সমাধানটিতে, আপনি এটি পড়বেন:

  • পদক্ষেপে 0, 1গোলাবারুদ সহ ফাঁড়িতে 100
  • পদক্ষেপে 1, শেষ বারুদ সহ 1ফাঁড়ি পেতে রুটটি ব্যবহার করুন397
  • পদক্ষেপে 2, শেষ বারুদ সহ 1ফাঁড়ি পেতে রুটটি ব্যবহার করুন195
  • ...

নোট বন্ধ হচ্ছে

সুতরাং, আমি আশা করি আমি আমার সমাধানটিকে আরও মারতে আরও কঠিন করেছি, তবে চেষ্টা করুন! আমার বিরুদ্ধে এটি ব্যবহার করুন, কিছু সমান্তরাল প্রক্রিয়াকরণে যোগ ভাল গ্রাফ তত্ত্ব, ইত্যাদি জিনিস দম্পতি আমি চিত্রে উন্নতি করতে পারে এই পদ্ধতির:

  • অ্যালগরিদম অগ্রগতির সাথে সাথে অযথা পুনঃপ্রচার কাটাতে আক্রমণাত্মকভাবে "কমান" লুপগুলি।
    • একটি উদাহরণ: উদাহরণস্বরূপ সমস্যাটিতে, লুপগুলি 1-2-2 এবং অন্যান্য ক্রমবিন্যাসকে "এক পদক্ষেপ" হিসাবে বিবেচনা করুন, যাতে আমরা চক্রের শেষের দিকে আরও দ্রুততর করতে পারি।
    • যেমন আপনি যদি নোড 1 এ থাকেন তবে আপনি (ক) 2 তে যেতে পারেন, (খ) 1 তে যেতে পারেন, (গ) এক ধাপ হিসাবে 1-2-2-3 পেরিয়ে যেতে পারেন। এটি কোনও সমাধানকে একটি নির্দিষ্ট গভীরতায় রুটের সংখ্যা বাড়িয়ে দেয় তবে দীর্ঘ চক্রের জন্য সময়-থেকে-সমাধানের ক্ষেত্রে গতি বাড়িয়ে দেয় solved
  • কুল মৃত রুট। আমার বর্তমান সমাধানটি "মনে রাখতে পারে না" যে কোনও নির্দিষ্ট রুটটি মৃত-সমাপ্ত এবং প্রতিবার এটি পুনরায় আবিষ্কার করতে হবে। মৃত্যুর সুনিশ্চিত একটি পথে প্রথম মুহুর্তের সন্ধান করা আরও ভাল হবে এবং এর আগে কখনও অগ্রগতি হবে না। এটা করেছে...
  • সাবধানতা অবলম্বন করলে আপনি সাব-রুট কুল হিসাবে মৃত রুট কুলিং প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, যদি 1-2 -৩-৪ সর্বদা মৃত্যুর ফলস্বরূপ ঘটে এবং সল্ভারটি ১-০-১-২-২-৩-৪ রুটটি পরীক্ষা করতে চলেছে, অবিলম্বে এটি শেষ হওয়ার গ্যারান্টিযুক্ত হিসাবে সেই পথটি অবতরণ করা বন্ধ করা উচিত হতাশায়। এখনও কিছু সতর্কতার সাথে গণিত সহ # খুনের গণনা করা সম্ভব হবে।
  • অন্য যে কোনও সমাধান যা সময়ের জন্য মেমরির ব্যবসা করে বা মৃত-শেষের পথে অনুসরণ করে আক্রমণাত্মক এড়ানোর অনুমতি দেয়। এটাও!

চমৎকার উত্তর! সমস্যা সমাধান করতে পারে এমন একমাত্র যখন তাদের কোডটি গল্ফ করা দরকার? আমি আমার নিজস্ব সমাধান লিখতে এখনই অনুপ্রাণিত, তাই আমি এটিতে কাজ করব।
রেনবোল্ট

দুর্দান্ত, আমি আশা করি এটিই করবে। আমার উত্তর থেকে যে কোনও জিনিস orrowণ নিতে / চুরি করতে নির্দ্বিধায় মনে হয় যে আপনি দরকারী বলে মনে করেন! যদিও অবশ্যই আমি আশা করি কেবল নিজের ও অপরের চেয়ে অন্যান্য লোকেরা সমাধানের চেষ্টা করবেন: পি
প্রোগ্রামারড্যান

আমি অবিচ্ছিন্ন হয়ে পড়েছি এবং আপনার কোডটি ছোট করতে শুরু করেছি। যদি আপনি ইতিপূর্বে আপনার উত্তরটি ভীতু মনে করেন তবে এটি পরীক্ষা করে দেখুন: tny.cz/17ef0b3a । এখনো কাজ চলছে.
রেইনবোল্ট

হাহাহা, আপনি সত্যিই বিভ্রান্ত হয়ে পড়েছিলেন। ভাল দেখাচ্ছে (কোড-গল্ফের জন্য যথাযথভাবে ভয়াবহ? আপনি কি জানেন আমি কী বোঝি) এতদূর!
প্রোগ্রামারডান

@ রাশার এখন পর্যন্ত কোন ভাগ্য? একটি রুট-উপস্থাপনা সংকোচনের কৌশল এবং ইতিমধ্যে প্রক্রিয়াজাত রুটগুলি (একটি বিন্দু পর্যন্ত) দ্রুত এগিয়ে যাওয়ার উপায় সহ আমি যে উন্নতি করছি সেগুলির জন্য আমি কয়েকটি ধারণা পেয়েছি।
প্রোগ্রামারডান

2

কিছু সমাধান সম্পর্কে বিমূর্ত নোট

আমি যদি সময় পাই তবে আমি এটিকে একটি অ্যালগরিদমে রূপান্তর করব ...

প্রদত্ত গ্রাফের জন্য Gসেখানে একটি সংযুক্ত উপ-গ্রাফ উপস্থিত G'রয়েছে যার মধ্যে রয়েছে শহর 1। যদি অসীম সমাধান তারপর একটি সংযুক্ত উপ-গ্রাফ বিদ্যমান থাকবে G''এর G'যা রয়েছে Vশহর ও Pপাথ।

পাথ Pএর G''যেমন বিভক্ত করা যায় যে {p}একটি পাথ যেখানে সমস্ত পাথ তত্কালীন ন্যূনতম খরচ হয়েছে ধারণ করে Pএবং P/{p}সব অন্যান্য পাথ (ক spanning গাছ বা সম্ভবত একটি চক্র গঠন) হয়। আমরা যদি ধরে নেই যে pএকটি লুপিং প্রান্ত (একই শহরে উভয় প্রান্ত সংযোগ) তাহলে এটিকে দুটি শহরে (সংযুক্ত করবে নয় v1এবং v2) এবং খরচ হয়েছে cগোলাবারুদ তারপর আপনি (জীবিত) তারপর থেকে তর্ক করতে পারেন v1থেকে v2মোট খরচে এবং ফিরে 2cগোলাবারুদ এবং এটি সমস্ত শহরে গোলাবারুদ ২ দ্বারা বাড়িয়ে তুলবে (এর 2|V|মধ্যে সম্পূর্ণ বৃদ্ধির জন্য G''- যার মধ্যে থেকে সংগ্রহ করা হবে v1এবংv2 )।

আপনার কাছ থেকে ভ্রমণ তাহলে v1করতে v2এবং ফিরে v1একাধিক ( m) বার এবং তারপর থেকে একটি ট্রিপ গ্রহণ v1প্রান্ত বরাবর P/{p}সব ছাড়া অন্য শহরগুলির দেখার জন্য v1এবং v2ফিরে আসার আগে v1এবং এই লাগেn অর্জন করা পাথ (যেখানে |P/{p}| ≤ n ≤ 2|P/{p}|যেহেতু আপনি আরো একটি পাথ, তর্ক করার প্রয়োজন নেই উচিত দ্বিগুণেরও বেশি) ব্যয় সহ kএবং শহরগুলি 2m|V|গোলাবারুদ অর্জন করবে (যার মধ্যে আবার কয়েকটি ট্র্যাভারসাল করার সময় সংগ্রহ করা হবে)।

এই সমস্ত দেওয়া পরে আপনি বলতে পারেন যে যদি ব্যয় হয় তবে অসীম সমাধান সম্ভাব্য সম্ভব কিনা k + 2mc মোট পুরষ্কারের তুলনায় সমান বা কম হয় 2(m+n)|V|

এতে সমস্যার অতিরিক্ত জটিলতা রয়েছে:

  • আপনার শুরু করার শহর থেকে ভ্রমণ করার প্রয়োজন হতে পারে 1 পারে{p} প্রথম পুনরাবৃত্তির এবং এই খরচ ফ্যাক্টর করার প্রয়োজনীয়তা উপর; এবং
  • আপনারও তা নিশ্চিত করা দরকার যে mএবংn প্রথম বারবারটি পুনরাবৃত্তির মাধ্যমে এটি তৈরি করার আগে আপনি যে পরিমাণে গোলাবারুদ চালাচ্ছেন না এটি পর্যাপ্ত পরিমাণে কম রয়েছে, কারণ প্রথম পুনরাবৃত্তির পরবর্তী পুনরাবৃত্তির চেয়ে বেশি দাম পড়বে)।

এটি প্রশ্নের ২৪ টি পথ ব্যয় নিরপেক্ষ সমাধানের দিকে নিয়ে যায় (সংখ্যাগুলি শহরগুলি পরিদর্শন করা হয়েছে):

1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,2,4,2,5,2,3, ... and repeat ...

একটি ছোট জিনিস যুক্ত করতে হবে - আপনাকে লুপিং প্রান্তগুলি 1 টির সাথে বিবেচনা করতে হতে পারে, কারণ ed প্রান্তগুলি একা একটি জয়ের শর্ত তৈরি করে যদি আপনি সময়মতো পৌঁছাতে পারেন।
রেইনবোল্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.