{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-06T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":673,"title":"Borderline Connectivity","description":"Compute the connected components of pixel borders.\r\n\r\nSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders.  If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included.  Your solution should work with either sort of input.\r\n\r\nIt should return lh and lv, a labeling on h and v.  These will be the same size as h and v, and zero wherever h and v are zero.  Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component.  Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1.  Two border locations are adjacent if they meet at a corner.  Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\r\n\r\nAn example may make this clearer.  Consider an original matrix of size 2x4, and the following border matrices:\r\n\r\n  h = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\n  v = [0 0 1 0 1; 1 0 0 1 1];\r\n\r\nThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as |, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\r\n\r\n  +-+-+ + +\r\n   1 3|5 7|\r\n  + + +-+ +\r\n  |2 4 6|8|\r\n  + + + +-+\r\n\r\nAs can be seen in the diagram, there are two separate groups of edges.  They will be labeled 1 and 2 in the final labeling.\r\n\r\n(Originally I wanted to call this problem \"Snakes on a Plane\", but that name is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane already taken\u003e.)","description_html":"\u003cp\u003eCompute the connected components of pixel borders.\u003c/p\u003e\u003cp\u003eSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders.  If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included.  Your solution should work with either sort of input.\u003c/p\u003e\u003cp\u003eIt should return lh and lv, a labeling on h and v.  These will be the same size as h and v, and zero wherever h and v are zero.  Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component.  Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1.  Two border locations are adjacent if they meet at a corner.  Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\u003c/p\u003e\u003cp\u003eAn example may make this clearer.  Consider an original matrix of size 2x4, and the following border matrices:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eh = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nv = [0 0 1 0 1; 1 0 0 1 1];\r\n\u003c/pre\u003e\u003cp\u003eThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as |, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e+-+-+ + +\r\n 1 3|5 7|\r\n+ + +-+ +\r\n|2 4 6|8|\r\n+ + + +-+\r\n\u003c/pre\u003e\u003cp\u003eAs can be seen in the diagram, there are two separate groups of edges.  They will be labeled 1 and 2 in the final labeling.\u003c/p\u003e\u003cp\u003e(Originally I wanted to call this problem \"Snakes on a Plane\", but that name is \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane\"\u003ealready taken\u003c/a\u003e.)\u003c/p\u003e","function_template":"function [lh,lv] = bordercon(h,v);\r\n  lh = h;\r\n  lv = v;\r\nend","test_suite":"%%\r\nh = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nv = [0 0 1 0 1; 1 0 0 1 1];\r\nlh_correct = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nlv_correct = [0 0 1 0 1; 2 0 0 1 1];\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n\r\n\r\n%%\r\nh = [0 0 1 0];\r\nv = [0 1 0; 0 0 1];\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n\r\n%%\r\nh = zeros(4,5);\r\nv = zeros(5,4);\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(all(lh==lh_correct)));\r\nassert(all(all(lv==lv_correct)));\r\n\r\n%%\r\nh = ones(6,5);\r\nv = ones(5,6);\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(all(lh==lh_correct)));\r\nassert(all(all(lv==lv_correct)));\r\n\r\n%%\r\nh = [1 0 0 1; 0 0 0 0; 0 0 1 1; 0 0 0 0; 1 0 0 1];\r\nv = [1 0 0 0 1; 0 1 0 0 0; 0 1 0 0 0; 1 0 0 0 1];\r\nlh_correct = [1 0 0 5; 0 0 0 0; 0 0 4 4; 0 0 0 0; 2 0 0 6];\r\nlv_correct = [1 0 0 0 5; 0 3 0 0 0; 0 3 0 0 0; 2 0 0 0 6];\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3117,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-08T14:04:06.000Z","updated_at":"2025-04-26T04:10:15.000Z","published_at":"2012-05-08T14:04:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompute the connected components of pixel borders.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders. If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included. Your solution should work with either sort of input.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt should return lh and lv, a labeling on h and v. These will be the same size as h and v, and zero wherever h and v are zero. Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component. Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1. Two border locations are adjacent if they meet at a corner. Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAn example may make this clearer. Consider an original matrix of size 2x4, and the following border matrices:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[h = [1 1 0 0; 0 0 1 0; 0 0 0 1];\\nv = [0 0 1 0 1; 1 0 0 1 1];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e |\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[+-+-+ + +\\n 1 3|5 7|\\n+ + +-+ +\\n|2 4 6|8|\\n+ + + +-+]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs can be seen in the diagram, there are two separate groups of edges. They will be labeled 1 and 2 in the final labeling.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e(Originally I wanted to call this problem \\\"Snakes on a Plane\\\", but that name is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ealready taken\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":673,"title":"Borderline Connectivity","description":"Compute the connected components of pixel borders.\r\n\r\nSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders.  If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included.  Your solution should work with either sort of input.\r\n\r\nIt should return lh and lv, a labeling on h and v.  These will be the same size as h and v, and zero wherever h and v are zero.  Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component.  Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1.  Two border locations are adjacent if they meet at a corner.  Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\r\n\r\nAn example may make this clearer.  Consider an original matrix of size 2x4, and the following border matrices:\r\n\r\n  h = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\n  v = [0 0 1 0 1; 1 0 0 1 1];\r\n\r\nThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as |, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\r\n\r\n  +-+-+ + +\r\n   1 3|5 7|\r\n  + + +-+ +\r\n  |2 4 6|8|\r\n  + + + +-+\r\n\r\nAs can be seen in the diagram, there are two separate groups of edges.  They will be labeled 1 and 2 in the final labeling.\r\n\r\n(Originally I wanted to call this problem \"Snakes on a Plane\", but that name is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane already taken\u003e.)","description_html":"\u003cp\u003eCompute the connected components of pixel borders.\u003c/p\u003e\u003cp\u003eSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders.  If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included.  Your solution should work with either sort of input.\u003c/p\u003e\u003cp\u003eIt should return lh and lv, a labeling on h and v.  These will be the same size as h and v, and zero wherever h and v are zero.  Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component.  Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1.  Two border locations are adjacent if they meet at a corner.  Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\u003c/p\u003e\u003cp\u003eAn example may make this clearer.  Consider an original matrix of size 2x4, and the following border matrices:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eh = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nv = [0 0 1 0 1; 1 0 0 1 1];\r\n\u003c/pre\u003e\u003cp\u003eThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as |, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e+-+-+ + +\r\n 1 3|5 7|\r\n+ + +-+ +\r\n|2 4 6|8|\r\n+ + + +-+\r\n\u003c/pre\u003e\u003cp\u003eAs can be seen in the diagram, there are two separate groups of edges.  They will be labeled 1 and 2 in the final labeling.\u003c/p\u003e\u003cp\u003e(Originally I wanted to call this problem \"Snakes on a Plane\", but that name is \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane\"\u003ealready taken\u003c/a\u003e.)\u003c/p\u003e","function_template":"function [lh,lv] = bordercon(h,v);\r\n  lh = h;\r\n  lv = v;\r\nend","test_suite":"%%\r\nh = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nv = [0 0 1 0 1; 1 0 0 1 1];\r\nlh_correct = [1 1 0 0; 0 0 1 0; 0 0 0 1];\r\nlv_correct = [0 0 1 0 1; 2 0 0 1 1];\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n\r\n\r\n%%\r\nh = [0 0 1 0];\r\nv = [0 1 0; 0 0 1];\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n\r\n%%\r\nh = zeros(4,5);\r\nv = zeros(5,4);\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(all(lh==lh_correct)));\r\nassert(all(all(lv==lv_correct)));\r\n\r\n%%\r\nh = ones(6,5);\r\nv = ones(5,6);\r\nlh_correct = h;\r\nlv_correct = v;\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(all(lh==lh_correct)));\r\nassert(all(all(lv==lv_correct)));\r\n\r\n%%\r\nh = [1 0 0 1; 0 0 0 0; 0 0 1 1; 0 0 0 0; 1 0 0 1];\r\nv = [1 0 0 0 1; 0 1 0 0 0; 0 1 0 0 0; 1 0 0 0 1];\r\nlh_correct = [1 0 0 5; 0 0 0 0; 0 0 4 4; 0 0 0 0; 2 0 0 6];\r\nlv_correct = [1 0 0 0 5; 0 3 0 0 0; 0 3 0 0 0; 2 0 0 0 6];\r\n[lh,lv] = bordercon(h,v);\r\nassert(all(size(lh)==size(lh_correct)));\r\nassert(all(size(lv)==size(lv_correct)));\r\nl = [lh(:);lv(:)];\r\nl_correct = [lh_correct(:);lv_correct(:)];\r\n[ul,ui,uj] = unique(l);\r\nassert(all(ul(ul~=0)'==1:max(ul)));\r\nfor i = ui'\r\n  assert(all(l_correct(l==l(i))==l_correct(i)));\r\n  assert(all(l_correct(l~=l(i))~=l_correct(i)));  \r\nend;\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3117,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-08T14:04:06.000Z","updated_at":"2025-04-26T04:10:15.000Z","published_at":"2012-05-08T14:04:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompute the connected components of pixel borders.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose that h and v together describe a logical labeling of the borders between matrix elements, with h representing the horizontal borders, and v representing the vertical borders. If the original matrix is MxN, then h will be (M+1)xN and v will be Mx(N+1) with external borders included, or (M-1)xN and Mx(N-1) respectively if external borders are not included. Your solution should work with either sort of input.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt should return lh and lv, a labeling on h and v. These will be the same size as h and v, and zero wherever h and v are zero. Where h and v are nonzero, lh and lv will be an integer label indicating membership in some connected border component. Two border locations are in the same component if they are connected by sequentially adjacent border segments whose h and v values are all 1. Two border locations are adjacent if they meet at a corner. Thus, h(i,j) is adjacent to h(i,j-1) and h(i,j+1), as well as v(i,j), v(i+1,j), v(i,j+1), and v(i+1,j+1) when external borders are included.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAn example may make this clearer. Consider an original matrix of size 2x4, and the following border matrices:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[h = [1 1 0 0; 0 0 1 0; 0 0 0 1];\\nv = [0 0 1 0 1; 1 0 0 1 1];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis corresponds to the following picture, where nonzero elements of h are shown as -, elements of v are shown as\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e |\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, corners are shown as +, and the eight elements of the original matrix are indicated by their index:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[+-+-+ + +\\n 1 3|5 7|\\n+ + +-+ +\\n|2 4 6|8|\\n+ + + +-+]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs can be seen in the diagram, there are two separate groups of edges. They will be labeled 1 and 2 in the final labeling.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e(Originally I wanted to call this problem \\\"Snakes on a Plane\\\", but that name is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/424-snakes-on-a-plane\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ealready taken\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"borders\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"borders\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"borders\"","","\"","borders","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc3ac8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f2f69bc3a28\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f2f69bde800\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc53c8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f2f69bc47e8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f2f69bc4568\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f2f69bc4068\u003e":"tag:\"borders\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc4068\u003e":"tag:\"borders\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"borders\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"borders\"","","\"","borders","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc3ac8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f2f69bc3a28\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f2f69bde800\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc53c8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f2f69bc47e8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f2f69bc4568\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f2f69bc4068\u003e":"tag:\"borders\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f2f69bc4068\u003e":"tag:\"borders\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":673,"difficulty_rating":"hard"}]}}